1最住、新建一個(gè)項(xiàng)目钞澳,命名隨意,比如叫NDK_demo涨缚,然后新建一個(gè)類NDKUtil轧粟,在里面加入jni方法:
public class NDKUtil
{
public static native String test();
}
2、第一步完成,這時(shí)候會發(fā)現(xiàn)方法名是紅色的兰吟,提示是cannot resolve通惫,不急,接下來混蔼,配置ndk路徑履腋,可以從自己去網(wǎng)上下載,也可以通過Android studio下載拄丰,點(diǎn)擊File-->Project Structure府树,在打開的頁面的Android NDK location中選擇你本地解壓的ndk的目錄。
3料按、修改項(xiàng)目下的build.gradle(不是app目錄下的)奄侠,把之前的這句
classpath 'com.android.tools.build:gradle:2.0.0'
替換成
classpath 'com.android.tools.build:gradle-experimental:0.4.0'
要在Android studio上做ndk開發(fā),需要依賴叫experimental的插件载矿。
4垄潮、修改app目錄下的build.gradle文件,未修改前的樣式如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.dhhuanghui.ndk_demo"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) test
Compile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
}
修改后的樣式:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "com.dhhuanghui.ndk_demo" minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 23
}
tasks.withType(JavaCompile){ sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7
}
}
/* * native build settings */
android.ndk {
moduleName = "NdkJniDemo"
// cppFlags.add("-fno-rtti")
// cppFlags.add("-fno-exceptions")
// ldLibs.addAll(["android", "log"])
// stl = "system"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.txt'))
}
}
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
create("x86-64") {
ndk.abiFilters.add("x86_64")
}
create("mips") {
ndk.abiFilters.add("mips")
}
create("mips-64") {
ndk.abiFilters.add("mips64")
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
}
其中android.ndk中配置的moduleName闷盔,作用如下
static {
System.loadLibrary("NdkJniDemo");//之前在build.gradle里面設(shè)置的so名字弯洗,必須一致
}
android.productFlavors配置后,編譯后會在app->build->intermediates->objectFiles下生成so庫逢勾,平臺看自己的需求牡整。
5、接下來我們生成頭文件溺拱,首先選擇Build->make project逃贝,編譯生成class文件,位置在app->build->intermediates->classes->all->debug目錄迫摔,我們直接在studio的terminal中使用cd命令切換到當(dāng)前項(xiàng)目的main目錄沐扳,然后通過如下命令在main目錄下生成jni文件夾以及頭文件
C:\Demo\NDK_demo\app\src\main>javah -d jni -classpath C:\Tools\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-19\android.jar;C:\Demo\NDK_demo\app\build\intermediates\classes\all\debug com.dhhuanghui.ndk_
demo.jni.NDKUtil
這時(shí)候再去編譯項(xiàng)目,發(fā)現(xiàn)第二步提到的紅色錯(cuò)誤已經(jīng)消失了句占。
6沪摄、這時(shí)候我們可以在jni目錄下新建一個(gè)c文件,然后編寫代碼纱烘。
ps:有時(shí)候在頭文件中會出現(xiàn)<jni. h>為紅色的情況杨拐,這時(shí)候需要把gradle-experimental:0.4.0'修改成其他版本,比如0.7.0凹炸,再重新編譯戏阅,錯(cuò)誤就會消失