资讯专栏INFORMATION COLUMN

AndroidStudio NDK开发最佳入门实践

macg0406 / 790人阅读

摘要:开发最佳入门实践网上一些介绍入门的教程,感觉都不是很完整和全面,也没有告诉初学的同学们一些需要注意的地方。本文所介绍的是在上搭建最佳的开发环境,给使用的开发人员最大的方便。开发最佳入门实践最后在程序中添加上加载库文件的代码。

AndroidStudio NDK开发最佳入门实践

网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学AndroidStudio NDK的同学们一些需要注意的地方。网上的方法大多需要使用javah命令,使用本文的方法将不再使用该命令了,是不是方便了很多。
本文所介绍的是在AndroidStudio上搭建最佳的NDK开发环境,给使用NDK的开发人员最大的方便。
本人AndroidStudio版本2.0。
本人Gradle版本2.10。

1. Android NDK开发工具准备

要进行Android NDK开发,首先要下载Android NDK开发工具。可以在AndroidStudio上面的下载,也可以自己下载好了,然后将NDK的路径设置为自己下载的Android NDK开发工具的路径。Android NDK开发工具下载地址:http://wear.techbrood.com/tools/sdk/ndk/ 。

2. Gradle的相关配置

gradle插件不支持NDK(当然用它也可以进行NDK开发,就是非常不方便),我们需要使用gradle-experimental插件。gradle-experimental插件使用的时候与gradle插件稍微有点区别。

1. 我们来配置Project的build.gradle

配置Project的build.gradle很简单就是将dependenciesclasspath的值改为对应的gradle-experimental插件。

    dependencies {
        classpath "com.android.tools.build:gradle-experimental:0.7.0"
    }  
2. 我们来配置Module的build.gradle

先给出一个我配置的范例,然后说明那些需要注意的。

apply plugin: "com.android.model.application"

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"
        defaultConfig {
            applicationId "com.lavor.ndklearning"
            minSdkVersion.apiLevel 15
            targetSdkVersion.apiLevel 23
            versionCode 4
            versionName "1.0.1"
        }
    }
    android.ndk {
        moduleName "lavor"
        ldLibs.addAll(["log"])
        cppFlags.add("-std=c++11")
        cppFlags.add("-fexceptions")
        platformVersion 15
        stl "gnustl_shared"
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles.add(file("proguard-rules.txt"))
        }
    }
}
dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.1.1"
    compile "com.android.support:recyclerview-v7:23.1.1"
    compile "com.android.support:design:23.1.1"
}  

首先在apply的时候我们引入的插件名称由"com.android.application"变成了"com.android.model.application"

其次,在原来android的外层加入了一个model层次。

再次,原来在android的里面的块,除了defaultConfig外,全部移除android块放入model块中与android并列,并且前面的名字加上android.

然后,compileSdkVersion 23buildToolsVersion "23.0.2"改成 compileSdkVersion = 23buildToolsVersion = "23.0.2",中间加上了=

其次,添加上android.ndk块,块中的moduleName表示C/C++代码打包成so文件的名字。

再次,android.buildTypes块中的proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"改成proguardFiles.add(file("proguard-rules.txt"))

最后,注意dependencies块依然在最外层,它不在model块中。

3. 开始NDK之旅

首先,在Android程序中添加一个native方法:public native String getString();

其次,我们注意到添加的native方法的方法名是红色的,将鼠标移动到方法名上(注意不能是括号里面或者后面),然后按下Alt+Enter快捷键,弹出一些解决的方法建议,点击第一个Create Function...

再次,此时会自动建立一个与java目录同级的jni目录,在jni目录自动建立一个c文件,在c文件中实现刚才的native方法。

然后,稍稍修改一下c文件中实现的native方法。

JNIEXPORT jstring JNICALL
Java_com_lavor_ndklearning_MainActivity_getString(JNIEnv *env, jobject instance) {
    // TODO
    return (*env)->NewStringUTF(env, "AndroidStudio NDK开发最佳入门实践");
}  

最后在Android程序中添加上加载so库文件的代码。

       static {
        System.loadLibrary("lavor");
       }  

运行程序后界面如下:

AndroidStudio NDK开发入门介绍完毕。程序源代码下载地址:https://github.com/lavor-zl/NDKLearning

注意:gradle的版本不能太低,不然会出错,AndroidStudio版本也不能太低不然可能没有集成C/C++编译器,某些1.7的JDK可能会出错,重新下载一个JDK就好了,并设置JDK的路径。

欢迎关注我的微信公众号:Android技术漫谈

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65961.html

相关文章

  • AndroidStudio NDK开发最佳入门实践

    摘要:开发最佳入门实践网上一些介绍入门的教程,感觉都不是很完整和全面,也没有告诉初学的同学们一些需要注意的地方。本文所介绍的是在上搭建最佳的开发环境,给使用的开发人员最大的方便。开发最佳入门实践最后在程序中添加上加载库文件的代码。 AndroidStudio NDK开发最佳入门实践 网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学Androi...

    e10101 评论0 收藏0
  • MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发

    摘要:前言我在上篇文章中介绍了的官方快速组件化方案当时一直强调是快速的组件化方案但是在文章中只提供了一个近万字的官方文档却没展现出这个组件化方案的快速之处看到近万字的文档后新手已经开始瑟瑟发抖了觉得入门成本太高想放弃写这篇文章的意义就是为了展现快 showImg(https://segmentfault.com/img/remote/1460000015444818); 前言 我在 上篇文章...

    melody_lql 评论0 收藏0
  • MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发

    摘要:前言我在上篇文章中介绍了的官方快速组件化方案当时一直强调是快速的组件化方案但是在文章中只提供了一个近万字的官方文档却没展现出这个组件化方案的快速之处看到近万字的文档后新手已经开始瑟瑟发抖了觉得入门成本太高想放弃写这篇文章的意义就是为了展现快 showImg(https://segmentfault.com/img/remote/1460000015444818); 前言 我在 上篇文章...

    Panda 评论0 收藏0
  • 使用QtCreator加速Android NDK开发调试

    摘要:为什么使用不需要装因为它用来写代码,轻量级跨平台,代码补全高亮不在话下,书签代码大纲编辑器分栏快捷键都挺好使。最后附上代码补全设置保存后,会自动,编辑器就立刻高亮和函数,按住键,将鼠标移到符号上点击就可以跳转,左箭头返回。 为APP开发JNI接口以及NDK动态库的时候,需要频繁修改和调试C/C++代码,如果在eclipse或AndroidStudio开发的话,需要1)clean项目,2...

    GT 评论0 收藏0
  • android 设计模式

    摘要:那为啥如何优雅的快速搭建项目系列教程一是基于上建立一套代码规范,继承对应的就能轻松实现快速模式开发。 [[译] MVVM 模式介绍](https://juejin.im/entry/56cbf... 让我们更好地理解 MVVM 模式 Android官方培训课程中文版 学习Android最有效率的途径就是官方教程,而对于英文不太好的童鞋可以参考这篇中文版翻译教程 android MVV...

    gotham 评论0 收藏0

发表评论

0条评论

macg0406

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<