Android studio NDK开发环境搭建

Android Studio NDK开发环境搭建

 

 

 

NDK开发环境搭建其实很简单。

 

1、安装配置NDK

 

打开SDK Manager 找到NDK并下载安装


在File- >Project Structure 选择SDK Location在Android NDKLocation中设置NDK路径

 

 


2创建项目配置相关信息

老版本gradle对ndk的支持不太完善 ,现在我们使用gradle-experimental插件。gradle-experimental插件使用的时候与gradle插件稍微有点区别。

(1)配置Project的

将dependencies中classpath的值改为对应的gradle-experimental插件。

 

dependencies {
    classpath 'com.android.tools.build:gradle-experimental:0.9.1'
}

 

 

(2)配饰 Moudle 的build.gradle

先给出一个我配置的,然后说明需要注意的

 

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 25
       
buildToolsVersion = "25.0.0"
       
defaultConfig {
            applicationId "com.lavor.ndklearning"
           
minSdkVersion.apiLevel 15
           
targetSdkVersion.apiLevel 25
           
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:25.0.0'
   
compile 'com.android.support:recyclerview-v7:25.0.0'
   
compile 'com.android.support:design:25.0.0'
}

 

 

·        (1)在apply的时候我们引入的插件名称由'com.android.application'变成了'com.android.model.application'。

·        (2)在原来android的外层加入了一个model层次。

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

·        (4)compileSdkVersion 25与 buildToolsVersion "25.0.0"改成 compileSdkVersion = 25和buildToolsVersion = "23.0.0",中间加上了=。

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

·        (6)android.buildTypes块中的proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'改成proguardFiles.add(file("proguard-rules.txt"))。

·        (7)注意dependencies块依然在最外层,它不在model块中。

 

3、真正的NDK

 

添加一个native方法,我直接在MainActivity中添加的,也可以自己写一个类,便于管理

 

public native String getstringFromC();

 

我们注意到添加的native方法的方法名是红色的,将鼠标移动到方法名上,然后按下Alt+ Enter快捷键,弹出一些解决的方法建议,点击第一个Create Function.... 

 

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

 

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_example_hp_ndktest_MainActivity_getstringFromC(JNIEnv *env, jobject instance) {
    // TODO
    return (*env)->NewStringUTF(env, "Hello Hello");
}

 

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

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

 

然后写个TextView 控件就能展示出来了

自己运行体验一下吧

 

 

当然,Android studio2.2之后,对c/c++的支持更加完善了,可以直接使用

 

注意:要在 AndroidStudio 中使用 CMake 或者ndk-build,需要使用 AndroidStudio 2.2 或更高的版本,同时需要配合使用 AndroidPlugin for Gradle 2.2.0 及以上的版本。

 

1、下载 NDK 和构建工具

 

要编译和调试本地代码(native code),你需要下面的组件:

The Android Native Development Kit (NDK): 让你能在 Android 上面使用 C 和 C++ 代码的工具集。

 

CMake: 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。

LLDB:Android Studio 上面调试本地代码的工具。

注意:要在 AndroidStudio 中使用 CMake 或者ndk-build,你需要使用 AndroidStudio 2.2 或更高的版本,同时需要配合使用 AndroidPlugin for Gradle 2.2.0 及以上的版本。

 

你可以使用 SDK Manager 来安装上述组件:

 

(1)打开一个项目,从菜单栏中选择 Tools > Android > SDK Manager。

(2)点击 SDK Tools 选项卡。

(3)勾选 LLDB,CMake 和 NDK。

 

 

 

2、创建项目

在 Configureyour new project 选项中,勾选 Include C++ Support 选项。

点击 Next,后面的流程和创建普通的Android studio 工程一样。

在 Customize C++Support 选项卡中。你有下面几种方式来自定义你的项目:

(1)C++ Standard:点击下拉框,可以选择标准C++,或者选择默认 CMake 设置的 Toolchain Default 选项。

(2)ExceptionsSupport:如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。

(3)Runtime TypeInformation Support:如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。

(4)点击 “Finish”。

 

项目创建好之后可以看到项目多了cpp目录

(1)cpp 目录存放你所有 native code 的地方,包括源码,头文件,预编译项目等。对于新项目,Android Studio 创建了一个 C++ 模板文件:native-lib.cpp,并且将该文件放到了你的 app 模块的 src/main/cpp/ 目录下。这份模板代码提供了一个简答的 C++ 函数:stringFromJNI(),该函数返回一个字符串:”Hello from C++”。

(2)External Build Files 目录是存放 CMake 或 ndk-build 构建脚本的地方。有点类似于 build.gradle 文件告诉 Gradle 如何编译你的 APP 一样,CMake 和 ndk-build 也需要一个脚本来告知如何编译你的 native library。对于一个新的项目,Android Studio 创建了一个 CMake 脚本:CMakeLists.txt,并且将其放到了你的 module 的根目录下。

 

点击 Run 按钮,Android Studio 会编译并启动一个 APP ,然后在 APP 中显示一段文字”Hellofrom C++”。从编译到运行示例APP 的流程简单归纳如下:

(1)Gradle 调用外部构建脚本,也就是 CMakeLists.txt。

(2)CMake 会根据构建脚本的指令去编译一个 C++ 源文件,也就是 native-lib.cpp,并将编译后的产物扔进共享对象库中,并将其命名为 libnative-lib.so,然后 Gradle 将其打包到 APK 中。

(3)在运行期间,APP 的 MainActivity 会调用 System.loadLibrary() 方法,加载 native library。而这个库的原生函数,stringFromJNI(),就可以为 APP 所用了。

(4)MainActivity.onCreate() 方法会调用 stringFromJNI(),然后返回 “Hello from C++”,并更新 TextView 的显示。

 

上述仅仅是最简单的示例,复杂的就需要发挥自己的特长来实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值