美文网首页android开发技术-NDK
Android Studio 3.0的NDK配置笔记

Android Studio 3.0的NDK配置笔记

作者: 封号斗罗 | 来源:发表于2017-12-14 23:56 被阅读738次

1. 如果是新建一个项目就需要勾选 那个include c++

2.如果是以前的项目就需要如下设置了

2.1 .先写一个demo测试一下: 

    新建一个方法,用native修饰方法返回类型前面:

如:public nativeStringgetStrFromC();

如果是kotlin写法如下:

:   val strFromC: String external get   //可以写一个方法形式:external funmyDate(x: Int): Double  、

2.2:,接着需要根据java 的native方法,使用javah工具类生成native的头文件,

进入java目录执行如下命令

javah -d ../jni  packageName.className

例如:

javah -d ../jni com.dremap.okhttpdemo.NdkJniUtils

2.3:,生成了头文件后,开始自己写c/c++了,目录可以随意的,但是是以项目的modu当前根目录为主目录的;

先在根目录下新建一个目录:如下

新建的目录名称可以随意,jni,cpp都可以,因为后面会讲一个配置,

接着就将jni拷贝到该目录下,然后新建一个c/c++实现的源码文件,导入相关头文件。

2.4: 然后再新建一个CMakeLists.txt文件,放到以根目录为相对目录的任意位置即可,都可以配置的;

然后写入的内容如下:

cmake_minimum_required(VERSION 3.4.1) #引入的版本号,如果不知道当前自己的,可以新建一个demo,然后查看即可;

add_library( myLib   #生成的动态库名称

SHARED  #生成shared库

src/main/jni/mymain.c ) # 这一步开始制定你的原代码的地方了,如果有多个可以空格隔开,或者换行,

find_library( myLib  #要查找的动态库名,和上面的add_library的名称保持一致

log ) # 引入log库;

target_link_libraries( # Specifies the target library.

            myLib    #链接的库名称,和上面的add_library名称一致;

        ${log-lib} ) #将log的库也链接进来;

2.5, 开始配置cmake文件的位置了,

deftmpClosure = {String str -> println str}

defSuperViewVersion ='25.3.1'

android {

tmpClosure("This is a Closure2---------------/////////\\\\\\")

compileSdkVersion25

defaultConfig {

tmpClosure("This is a Closure3---------------/////////\\\\\\")

applicationId"com.xh.openui"

minSdkVersion19

targetSdkVersion22

versionCode1

versionName"1.0"

externalNativeBuild {

tmpClosure("This is a Closure4---------------/////////\\\\\\")

cmake {

tmpClosure("This is a Closure5---------------/////////\\\\\\")

cppFlags"-fexceptions"

abiFilters"armeabi","x86"

}

}

ndk{

//moduleName"myLib"

//ldLibs"log","z","m"

abiFilters"armeabi","x86"

}

}

/*sourceSets.main {

jniLibs.srcDir 'libs'

}*/

buildTypes {

release {

minifyEnabledfalse

proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

}

tmpClosure("This is a Closure6---------------/////////\\\\\\")

externalNativeBuild {

cmake {

path"CMakeLists.txt"

}

}

}

以上为android节点下的配置,tmpClosure为基于Groovy语言自定义的DSL脚本闭包函数,用来打印日志信息;

2.6 ,开始编译,一般还会有问题,有几处需要配置一下,

项目的proj目录下的gradle.properties 需要配置一行 android.useDeprecatedNdk=true   #允许使用旧版本的ndk

还需要注意 proj目录下的local.properties 文件配置,

配置sdk和ndk,

ndk.dir=E\:\\AndroidSDK_NEW_150724\\ndkr10\\android-ndk-r12b

sdk.dir=E\:\\AndroidSDK_NEW_150724\\sdk

注意随着cmake的升级,ndk也需要升级,目前用的cmake是3.6.3155560的

ndk用的是12的,LLDB版本是2.3的;

然后执行编译就可以成功了,如果有错误,请检查以上配置,

编译完成后会在\.externalNativeBuild\cmake\debug\armeabi\CMakeFiles\myLib.dir\src\main\jni路径下生产中间连接的产物.o文件,

在项目的modu的\myOpengles\build\intermediates\cmake\debug目录下将生成最终的各个cpu架构的动态库或者静态库,这时候的普通工程改造就完成了,有的步骤可以使用ided的辅助功能更简单的完成。比如:

这样去指定要编译的cmke的CMakeLists.txt,或者ndkbuild的Android.mk文件;

可以帮你手动在module中的gradle配置,

#还有如debug开启:

debug {

jniDebuggable true

}

,当然会遇到很多问题,多沟通交流就可以解决,比如百度,谷歌也可以的;

相关文章

网友评论

    本文标题:Android Studio 3.0的NDK配置笔记

    本文链接:https://www.haomeiwen.com/subject/jomlwxtx.html