JNI简单使用

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());

    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值