1.快速生成头文件
(1)打开as的Terminal,输入cd app/src/main/java
(2)通过javah生成头文件:javah -d ../jni -jni test.ndkdemo.PrintUtil(包名+类名,而且不要再MainActivity里面定义native函数)
参考:http://blog.youkuaiyun.com/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文件