1.快速生成頭文件
(1)打開as的Terminal,輸入cd app/src/main/java
(2)通過javah生成頭文件:javah -d ../jni -jni test.ndkdemo.PrintUtil(包名+類名,而且不要再MainActivity裏面定義native函數)
參考:http://blog.csdn.net/lvxiangan/article/details/52348975
2.gradle文件的配置
(1)project的build.gradle
就classpath 需要改動
buildscript {
repositories {
jcenter()
}
dependencies {
// 這裏build:gradle改成gradle-experimental
//其實gradle-experimental是有版本對應的,不過as後面會有提示,換一下就行
//classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.android.tools.build:gradle-experimental:0.9.3'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
(2)app module的build.gradle
改動比較多,要仔細對照
//apply plugin: 'com.android.application'
apply plugin: 'com.android.model.application'//注意這裏多了一個model,所以下面所有的都要用model包起來
model {
android {
compileSdkVersion = 25
buildToolsVersion = "25.0.2"
defaultConfig.with {//注意這裏的with,和上下變量中間的等號
applicationId = "test.ndkdemo"
minSdkVersion.apiLevel = 19//注意這裏的apiLevel
targetSdkVersion.apiLevel = 25
versionCode = 1
versionName = "1.0"
//下面這句可以不要
//testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
//buildTypes必須單獨提取出來,必須這麼寫(本來前面不需要android字樣的)
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.pro'))
//有的as據說是應該這樣寫
//proguardFiles += file('proguard-rules.pro')
}
}
android.ndk {
moduleName = "JniLib"//so庫的名字
}
}
//dependencies這裏不用動
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
}
//更詳細的說明參考:http://www.cnblogs.com/zhuyp1015/p/4976116.html
//參考地址裏面有compileOptions.with選項,但是我添了反而報錯
3.編寫程序測試
在jni文件夾中生成c文件,然後編寫,然後make project之後就可以運行了
生成的so文件在
E:\NDKDemo\app\build\intermediates\transforms\stripDebugSymbol\debug\folders\2000\1f\main\lib
裏面有所有平臺的lib文件