美文网首页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