JNI简单使用

    xiaoxiao2021-03-25  97

    JNI的简单使用

    1、创建项目,创建Jni.java

    public class Jni {     private static final String TAG = "piao.yezi.jnidemo2.jni.Jni";     public native  String getJniString();     static {         System.loadLibrary("Jni");     } }

    2、 Terminal命令:

    cd Module名/build/intermediates/classes/debug/

    生成h头文件,命令如下;

    javah -jni piao.yezi.jnidemo2.jni.Jni  

    (上一行的最后Jni为类名)

    在main下创建jni Package,拷贝头文件到指定目录,命令如下:

    cp piao_yezi_jnidemo2_jni_Jni.h../../../../src/main/jni/

    3、创建和h头文件同名的c文件,include头文件:

    h文件内容为:

    /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class piao_yezi_jnidemo2_jni_Jni */ #ifndef _Included_piao_yezi_jnidemo2_jni_Jni #define _Included_piao_yezi_jnidemo2_jni_Jni #ifdef __cplusplus extern "C" { #endif /*  * Class:     piao_yezi_jnidemo2_jni_Jni  * Method:    getJniString  * Signature: ()Ljava/lang/String;  */ JNIEXPORT jstring JNICALL Java_piao_yezi_jnidemo2_jni_Jni_getJniString   (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif

    c文件文件内容为:

    // // Created by yezi on 2017/3/9. // #include "piao_yezi_jnidemo2_jni_Jni.h" jstring JNICALL Java_piao_yezi_jnidemo2_jni_Jni_getJniString   (JNIEnv *env, jobject obj){   return (*env)->NewStringUTF(env,"Hello from jni!!!");   }

    4、在module的build.gridle文件的配置ndk

    defaultConfig {     applicationId "piao.yezi.jnidemo2"     minSdkVersion 16     targetSdkVersion 25     versionCode 1     versionName "1.0"     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"     ndk {         moduleName "Jni" //生成so名字         abiFilters "armeabi", "armeabi-v7a", "x86" //生成支持的平台     } }

    5、 在Android模式下,打开Gradle Scripts,找到gradle.properties文件,打开,在最后一行添加,配置使用c/c++

    android.useDeprecatedNdk = true

     

     

     

     

    6、在MainActivity中调用native方法

    package piao.yezi.jnidemo2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import piao.yezi.jnidemo2.jni.Jni; public class MainActivity extends AppCompatActivity {     private TextView mText;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         mText = ((TextView) findViewById(R.id.text));         Jni jni = new Jni();         mText.setText(jni.getJniString());     } }

     

    转载请注明原文地址: https://ju.6miu.com/read-16072.html

    最新回复(0)