新建android工程
文件目录如下
native接口和System.loadLibrary()
package cn.laura.laurajni;
/**
* JNI文件
* User: ZhiyaZhao(zhiyazhao@126.com)
* Date: 2016-05-04
* parma: 23:20
* FIXME
*/
public class NdkJniUtils {
public native String getCLanguageString();
static {
System.loadLibrary("LauraJNI"); //defaultConfig.ndk.moduleName
}
}
Activity中调运JNI
package cn.laura.laurajni;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.tv_helloworld);
NdkJniUtils jni = new NdkJniUtils();
mTextView.setText(jni.getCLanguageString());
}
}
生成对应的 .h头文件
后
build project得到其中中间文件,我们关注的是.class文件。
编译OK以后生成的class文件在AS工程的如下目录
app_path/build/intermediates/classes/debug
创建名为jni的目录并复制.h文件
在工程的main目录下新建一个名字为jni的目录,然后将刚才的 .h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫jnitest.c 。然后编辑代码如下
#include "cn_laura_laurajni_NdkJniUtils.h"
JNIEXPORT jstring JNICALL Java_cn_laura_laurajni_NdkJniUtils_getCLanguageString
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"Hello world! Laura~");
}
配置build.gradle
接下来在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "cn.laura.laurajni"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk{
moduleName "LauraJNI" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}