首先必须具有NDK,下载地址:
不废话,开始(我把使用ndk的部分作为一个moudle来使用)
在已有的studio项目中 新建moudle,把创建Mainactivity勾掉 ,
选择 android library在新建的moudle里,新建一个本地native java文件,
加载的so文件后缀要加“Lib“,不知为何。
如:
生成.h头文件
首先build 新建的moudle,从而会生成刚创建的java文件的.class文件。
打开android studio的terminal命令窗口,进入当前moudle的src/main目录下 执行
JarlendeMacBook-Pro:main jarlen$ javah -d jni -classpath ../../build/intermediates/classes/debug cn.jarlen.gpuimagelibrary.YUVCoderLibrary
此时,会生成一个jni文件夹,和里面所需要的.h头文件
配置moudle
打开当前moudle下的build.gradle文件defaultConfig中加入ndk的声明
defaultConfig {
applicationId "cn.jarlen.gpuimagelibrary"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
ndk { moduleName "libraryLib" }
}
- 配置 项目,找到 local.properties文件,配置ndk路径
sdk.dir=/android-sdk-macosx
ndk.dir=/ndk/android-ndk-r10e
最后就是 完成moudle的C++/C源代码了。
这样就可以直接编译了,不用自己编写make文件了
常见问题:
Error:Execution failed for task ':gpuimage library:compileDebugNdk'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/ndk/android-ndk/ndk-build'' finished with non-zero exit value 2
可能原因:
- C++/c源文件有错,比如 刚才我在test的时候,在include的时候多写了一个”#”号
- 也有可能 所知的studio的一个bug ,可以在jni下新建一个空的源文件。
其他问题 可参考
http://blog.csdn.net/asmcvc/article/details/24457677
http://www.race604.com/android-studio-with-ndk/
还有这个问题,overflow上不知道所云。
http://stackoverflow.com/questions/27432596/unity-project-as-dependency-in-gradle
Warning:Dependency gpuimage-for-android-studio:gpuimagelibrary:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: /Users/jarlen/Downloads/gpuimage-for-android-studio/gpuimagelibrary/build/output
解决方法为:
打开build.gradle文件,
1 .删除defaultConfig中的applicationId项
2.修改 apply plugin: ‘com.android.application’为apply plugin: ‘com.android.library’
即可。
如果会出现
Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcn/jarlen/gpuimagelibrary/YUVCoderLibrary;
可将so库文件加上Lib后缀。