Android Studio 编写jni 实例

1.保证AS中安装了ndk cmake 等插件 如没有可以通过AS中的Android SDK -> SDK Tools 勾选 在线下载安装
  2.创建一个Android 项目Demo项目即可 
  3.添加Java2CJNI.java 注意此文件的包名类名
 
 public class Java2CJNI {
    //static {
    //    System.loadLibrary("Java2C");
    //}
    public native String java2C();
}

   // System.loadLibrary("Java2C");//}public native String java2C();}注意此文件中的            static {

System.loadLibrary("Java2C");
} 先注释掉 后面在编译生成.so库时再添加

4.生成.h文件
先将Java2CJNI.java 运用javac生成.class 文件再通过javah 命令生成.h
javac F:\AndroidStudio\MyJDK2\app\src\main\java\com\example\revo\myjdk\Java2CJNI.java
javah -classpath D:\androidstudy\app\build\intermediates\classes\debug -jni com.example.revo.myjdk.Java2CJNI
最后在代码目录如果看到com_example_revo_myjdk_Java2CJNI.h文件说明已成功
5.创建jni目录 拷贝com_example_revo_myjdk_Java2CJNI.h 同时创建.c文件
//
	// Created by Administrator on 2018/5/24.
	//
	#include "com_example_revo_myjdk_Java2CJNI.h"
	JNIEXPORT jstring JNICALL Java_com_example_revo_myjdk_Java2CJNI_java2C
	  (JNIEnv *env, jobject instance){
	  return (*env)->NewStringUTF(env, "I am From Native C");
	}
       6.build.gradle文件和gradle.properties 的修改
注意build.gradle 文件为app目录下的
defaultConfig {
        applicationId "com.example.revo.myjdk"
        minSdkVersion 27
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "Java2C"                 //生成的库名
            abiFilters  "armeabi-v7a", "x86"    //指定的平台类型,如果不写,则默认会生成全平台的
        }
    }
gradle.properties文件中增加如下一行android.useDeprecatedNdk=true
点击Rebuild project 如果出现类似android.deprecatedNdkCompileLease=1527128725578等错误请在gradle.properties文件中增加如下一行
添加 android.deprecatedNdkCompileLease=1527128725578 注释掉android.useDeprecatedNdk=true
7.再次Rebuild project 如果成功 在MyJDK2\app\build\intermediates\ndk\debug\lib\armeabi-v7a
  和MyJDK2\app\build\intermediates\ndk\debug\lib\x86目录均会出现libJava2C.so文件
  为了使用.so库中的函数记得将 
  public class Java2CJNI {
static {
System.loadLibrary("Java2C");
}
public native String java2C();
}
static {
System.loadLibrary("Java2C");
}注释部分去掉    

    8.总结如果熟练或者说提高效率 4 5 步骤可以省略不用他们生成.h 直接新建jni文件 添加.c文件

    可通过下面链接直接下载源码:

    下载源码

你可能感兴趣的:(android)