Android NDK配置

NDK官方文档:http://developer.android.com/intl/zh-cn/ndk/index.html

    The Android NDK is a toolset that lets you implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can help you reuse existing code libraries written in those languages.

public class MyActivity extends Activity {
/**
* Native method implemented in C/C++
*/
public native void computeFoo();
}

Ndk基本使用介绍:
http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html

    从Android Studio 1.3 Beta1开始,就支持了NDK。不过使用的是一个全新的实验性的gradle构建工具。官方地址 http://tools.android.com/tech-docs/new-build-system/gradle-experimental ,英文好的可以直接看原文。

在进行配置前请先将Android Studio更新至最新版本,目前最新版本是1.4 Bata4
Android Studio使用新的Gradle构建工具配置NDK环境
并且使用Android Studio内置的SDK管理器下载NDK。
Android Studio使用新的Gradle构建工具配置NDK环境
或者在项目上右键打开Project Structure,切到的SDK Location页进行安装
Android Studio使用新的Gradle构建工具配置NDK环境
注意这个NDK安装好后其目录在SDK目录下的ndk-bundle目录下,与以往的不同。
要修改的文件见下图
Android Studio使用新的Gradle构建工具配置NDK环境
首先需要将根目录下的gradle修改为实验性的gradle
classpath ‘com.android.tools.build:gradle-experimental:0.2.0’
最终是这样的
Android Studio使用新的Gradle构建工具配置NDK环境
并且需要gradle 2.5的支持,将gradle/gradle-wrapper.properties中的版本修改为2.5
distributionUrl=https/://services.gradle.org/distributions/gradle-2.5-all.zip
最终是这样的
Android Studio使用新的Gradle构建工具配置NDK环境
然后修改原来的app/build.gradle,注意现在各项配置都是有等号的,并且使用的是 com.android.model.application而不再是原来的com.android.application,如果是Library,则 是com.android.model.library。然后android外围包了一层model。原来在android里面的buildTypes 移到了外面。等等,看下面内容,注意变化。

1   <span style="font-size: medium;">apply plugin: 'com.android.model.application'
2   model{
3     android {
4       compileSdkVersion = 22
5       buildToolsVersion = "23.0.1"
6       defaultConfig.with {
7         applicationId = "com.kltz88.car.jnidemo"
8         minSdkVersion.apiLevel = 14
9         targetSdkVersion.apiLevel = 22
10        versionCode = 1
11        versionName = "1.0"
12      }
13      tasks.withType(JavaCompile) {
14          //指定编译JDK版本
15        sourceCompatibility = JavaVersion.VERSION_1_7
16        targetCompatibility = JavaVersion.VERSION_1_7
17      }
18    }
19    android.ndk {
20      moduleName = "test"
21      ldLibs +="log"
22      abiFilters +="armeabi"
23      abiFilters +="armeabi-v7a"
24      abiFilters +="x86"
25    }
26    android.buildTypes {
27      release {
28        minifyEnabled = false
29        proguardFiles += file( 'proguard-rules.pro')
30      }
31    }
32  }
33  dependencies {
34    compile fileTree(dir: 'libs', include: ['*.jar'])
35    compile 'com.android.support:appcompat-v7:22.2.1'
36  }</span>

在android.ndk中进行ndk的配置,模块名字是必须的。然后使用了log,并且支持armeabi,armeabi-v7a,x86三个平台。
然后增加jni目录,在main上右键新建jni目录
Android Studio使用新的Gradle构建工具配置NDK环境
在弹出的窗口中你可以修改jni目录,默认是在main/jni中
Android Studio使用新的Gradle构建工具配置NDK环境
新建一个Test的类,加载jni库,声明native方法

public class Test { static {
        System.loadLibrary("test");
    } public native void test();
}

这时候你会发现test方法是红色的
Android Studio使用新的Gradle构建工具配置NDK环境
在上面按alt+enter生成c层的方法
Android Studio使用新的Gradle构建工具配置NDK环境
修改为下方的代码

include <jni.h> #include "android/log.h" JNIEXPORT void JNICALL
Java_com_kltz88_car_jnidemo_Test_test(JNIEnv *env, jobject instance) {
    __android_log_write(ANDROID_LOG_ERROR,"TAG","TEST");

}

如果你需要生成头文件,使用命令行即可
Android Studio使用新的Gradle构建工具配置NDK环境
之后会在jni目录生成对应的头文件
Android Studio使用新的Gradle构建工具配置NDK环境
然后在java层调用

1   <span style="font-size: medium;">public class MainActivity extends AppCompatActivity {
2     @Override
3     protected void onCreate(Bundle savedInstanceState) {
4       super.onCreate(savedInstanceState);
5       setContentView(R.layout.activity_main);
6       Test t=new Test();
7       t.test();
8     }
9   }</span>

便会看到日志的输出。
Android Studio使用新的Gradle构建工具配置NDK环境
注意如果没有在gradle中指定java的对应版本,运行时可能会报错

1   <span style="font-size: medium;">tasks.withType(JavaCompile) {
2               //指定编译JDK版本
3               sourceCompatibility = JavaVersion.VERSION_1_7
4               targetCompatibility = JavaVersion.VERSION_1_7
5           }</span>

错误信息如下,遇到该错误加上上面的代码即可
Android Studio使用新的Gradle构建工具配置NDK环境
最后就是调试的问题了,理论上来说应该是支持调试的,但是我在windows上并没有试验成功。下面贴出步骤。
Android Studio使用新的Gradle构建工具配置NDK环境
增加native运行方法
Android Studio使用新的Gradle构建工具配置NDK环境
修改为
Android Studio使用新的Gradle构建工具配置NDK环境
然后下断点,理论上是能调试的,但是我遇到了下面的问题,导致无法继续,也查过了,查不出问题所在,就这样吧,改天在linux下试试是不是正常。
Android Studio使用新的Gradle构建工具配置NDK环境
你会发现整个流程下来,原来的Android.mk和Application.mk都不再需要了,所有配置在gradle中配置即可。
官方的github示例代码
https://github.com/googlesamples/android-ndk
我的示例代码
http://download.csdn.net/detail/sbsujjbcy/9108775

/*************************************参考二************************************/

在2015的Google I / O大会,5月底,谷歌宣布了一项新的支持由Android NDK Studio 1.3,Jetbrains CLion集成功能,Android gradle插件。这种支持只在7月已经发布,虽然很有前途,还是在沉重的发展。
新的工具包支持需要使用Android Studio 1.3 RC1 +和Android gradle-experimental插件。
gradle-experimental插件需要使用gradle - 2.6或更高版本。
1.应用设置gradle版本
gradle-2-5
2.文本设置gradle版本
gradle/wrapper/gradle-wrapper.properties:
distributionUrl=https://services.gradle.org/distributions/gradle-2.6-all.zip
然后,改变对android的引用gradle新gradle-experimental插件,插件。/ build.gradle:
复制代码
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle-experimental:0.3.0-alpha5’
}
}
复制代码
你需要修改build.gradle文件来使用这些新的插件。这是相同的配置的一个例子,老的DSL(顶部)和新(底部):
old DSL
复制代码

apply plugin: 'com.android.application'

android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

defaultConfig {
applicationId "com.ph0b.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 4
versionName "1.0.1"

ndk {
moduleName "mymodule"
ldLibs "log"
stl "gnustl_static"
cFlags "-std=c++11 -fexceptions"
}
}

signingConfigs {
release {
storeFile file(STORE_FILE)
storePassword STORE_PASSWORD
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
}
}

buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.release
}
debug {
jniDebuggable true
}
}
}

dependencies {
compile 'com.android.support:support-v4:23.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
}

复制代码

new DSL
复制代码

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

model {
android {
compileSdkVersion = rootProject.ext.compileSdkVersion
buildToolsVersion = rootProject.ext.buildToolsVersion

defaultConfig.with {
applicationId = "com.ph0b.example"
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 23
versionCode = 4
versionName = "1.0.1"
}
}

android.ndk {
moduleName = "mymodule"
ldLibs += ['log']
cppFlags += "-std=c++11"
cppFlags += "-fexceptions"
stl = 'gnustl_shared'
}

android.signingConfigs {
create("release") {
keyAlias = KEY_ALIAS
keyPassword = STORE_PASSWORD
storeFile = file(STORE_FILE)
storePassword = KEY_PASSWORD
}
}

android.buildTypes {
release {
minifyEnabled = true
shrinkResources = true
proguardFiles += file('proguard-rules.txt')
// signingConfig = signingConfigs.release //not activated yet because of https://code.google.com/p/android/issues/detail?id=182249}
}
}

dependencies {
compile 'com.android.support:support-v4:23.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
复制代码

总的改变在所有android的声明在modle{}内,各个变量的赋值使用显示的”=”,数组不能被复写(用+=),变量和其他新配置必须使用声明”创建()’比如xxxSdkVersion改为xxxSdkVersion.apiLevel属性。
你可以在DSL进行配置NDK,默认就可以不使用Android.mk老配置了.

开始新的c++ / NDK支持AndroidStudio
1.首先在build.gradle配置NDK模块的声明来激活c++ / NDK支持
model {
//…android.ndk {
moduleName = “mymodule”
}
}
2.完成这步你就可以在Java文件下创建一个方法带Native关键字,并且按ALT+Enter来生成C++,实现:
AS-ndk-demo

就这么简单方便。

实现的cpp文件将被添加在jni文件夹中。

为了使用NDK模块,这里google提供了github的例子https://github.com/googlesamples/android-ndk

下面是你配置ndk需要的所有配置:
复制代码
android.ndk {
moduleName = “mymodule”
ldLibs += [‘log’]
ldFlags += “”
toolchain = “clang”
toolchainVersion = “3.9”
abiFilters += “x86”
CFlags += “”
cppFlags += “”
debuggable = false
renderscriptNdkMode = false
stl = “system”
platformVersion = 15
}
复制代码

NDK项目的调试

Android Studio 1.3 +支持LLDB和GDB后端的调试功能,创建和使用一个新的从Android原生“运行/调试配置默认值:
native-debug-config
使用你的debug调试你的NDK,默认设置debugable标志totrue.

//2016-11-23
配置build.gradle的classpath:
具体可以参考http://tools.android.com/tech-docs/new-build-system/gradle-experimental

Each version of the experimental plugin requires a specific version of Gradle. Here is a list of required Gradle version.

Plugin VersionGradle Version
0.1.02.5
0.2.02.5
0.3.0-alpha32.6
0.4.02.8
0.6.0-alpha12.8
0.6.0-alpha52.10
0.7.0-alpha12.10
0.7.02.10
0.7.32.14.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值