基于android studio NDK项目构建过程

来源:互联网 发布:雅兰仕s8软件 编辑:程序博客网 时间:2024/06/05 10:18
  • 首先必须具有NDK,下载地址:

    https://developer.android.com/ndk/downloads/index.html

  • 不废话,开始(我把使用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-macosxndk.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

可能原因:

  1. C++/c源文件有错,比如 刚才我在test的时候,在include的时候多写了一个”#”号
  2. 也有可能 所知的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后缀。

1 0