1:已有NDK工程建议还是按照之前使用的ndk-build编译
2:新的NDK开发
2.1 工具准备
as+ndk+cmake+lldb
2.2 添加配置
local.properties内添加ndk及sdk目录
app的build.gradle内 android.defaultconfig下添加
ndk{
moduleName = "my-jni"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
gradle.properties 内添加
android.useDeprecatedNdk=true
2.3添加 native 函数声明
例如:
public class MyJNI { static { System.loadLibrary("my-jni"); } public native void sayHello(); }
2.4 根据函数声明生成头文件
在声明native函数的目录下运行javah
例如:
D:\AndroidStudioProjects\JNITest\app\src\main\java>javah com.example.administrator.jnitest.MyJNI 2.5 C实现
在main文件夹下创建jni目录并将2.4产生的.h移至该目录下,并添加.h的实现
2.6 编译
build-> clean project, build->rebuild project
在 app\build\intermediates\ndk\debug\lib 目录就可看到按平台区分.so
总结:
因为安装as时方法不一样可能会导致没有 cmake, lldb 等,这导致编译正常但是无法生成.so
不用手工添加makefile
Set "$USE_DEPRECATED_NDK=true" in gradle.properties to continue using the current NDK integration.错误解决是在
gradle.properties 内添加 android.useDeprecatedNdk=true ,如继续报此错误应该clean project 后rebuild
得运行命令生成.h,不说说按alt+enter能自动生成的嘛·咋不行呢···