1.下载NDK
- 在src/main/jni目录下 新建文件 Android.mk 和 Application.mk,hello-jni.c文件内容如下
Android.mk
LOCALPATH := $(call my-dir) include $(CLEARVARS) LOCALMODULE := hello # 生成的静态链接库或动态链接库的名字, linux 下生成 libhello.so LOCALSRCFILES := hello-jni.c # 所有的源文件,空格隔开 include $(BUILDSHARED_LIBRARY) # 生成动态链接库
Applocation.mk
APP_ABI := all # 生成所有CPU架构下的库,如果没有 Application.mk 默认只会生成 arm 架构下的库
hello-jni.c
include jstring JavacomexamplelesliefangmyapplicationMainActivitystringFromJNI(JNIEnv env, jobject thiz) { return (env)->NewStringUTF(env, "Hello from JNI ! "); }
注意方法的命名:必须包含到类的完整的包名
在build.gradle 里添加模块
defaultConfig { ndk { moduleName "hello" // 要生成的库文件的名称 } }
别忘了在local.properties配置ndk路径
ndk.dir=/Users/baidu/android/android-ndk/android-ndk-r10e sdk.dir=/Users/baidu/android/android-sdk
android里面就可以直接使用了
public class MainActivity extends Activity { TextView textView; static { System.loadLibrary("hello"); } public native String stringFromJNI(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textview1); textView.setText(stringFromJNI()); } }
如果报错如下
Error:(16, 0) NDK integration is deprecated in the current plugin.
请在gradle.properties添加’android.useDeprecatedNdk=true’