0.工程的local.properties中配置ndk
ndk.dir=D\:\\AndroidSDK\\ndk-bundle
sdk.dir=D\:\\AndroidSDK
1.src/main/java/com/example/test中添加Java2CJNI.java
package com.example.test;
/**
* Created by forlan on 2019/5/27
*/
public class Java2CJNI {
/*static {
System.loadLibrary("Java2CJNI");
}*/
//先屏蔽这一段逻辑,因为so还没有生成,最后运行的时候再放开
public native static String java2C();
}
make project,生成.class文件
2.创建src/main/jni目录
3.创建com_example_test_Java2CJNI.h和Java2C.c
//命令创建.h
D:\AS_workspace\TestApk\app\build\intermediates\classes\debug>javah com.example.test.Java2CJNI
创建.c
//
// Created by forlan on 2019/5/27.
//
#include <jni.h>
#include <stdio.h>
#include "com_example_test_Java2CJNI.h"
JNIEXPORT jstring JNICALL Java_com_example_test_Java2CJNI_java2C(JNIEnv *env, jclass instance)
{
return (*env)->NewStringUTF(env, "I am from Native C !");
}
创建完成后,将.c .h移动到jni目录
4.jni中创建Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Java2CJNI
LOCAL_SRC_FILES := Java2C.c
include $(BUILD_SHARED_LIBRARY)
5.app build.gradle android包里面添加
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//add 1
ndk {
moduleName "Java2C"
abiFilters "armeabi-v7a", "arm64-v8a", "x86"
}
}
//add 2
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
6.rebuild project
7.run app
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.window_bg));
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fourth);
Log.d(TAG, "forlan debug jni str is " + Java2CJNI.java2C());