Android JNI NDK初步使用详解

项目配置NDK环境


gradle.properties 下面添加

android.useDeprecatedNdk=true
app目录下的build.grade的defaultConfig添加
ndk {
            moduleName "NdkJniDemo"          //编译生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }

目前准备工作完成。
在java文件中写我们需要的本地方法
package sunrui.jniapplication;

/**
 * Created by sunrui on 16/7/14.
 */
public class JNIUtil {
    public static native String getString();
    public static native String getStringC(int i);
}

编译这个java文件,找到编译完成的class文件

生成头文件的命令:

javah -jni sunrui.jniapplication.JNIUtil

然后将生成的头文件拷到main下面的jni文件夹(新建一个)
然后写你的C代码吧
//
// Created by sunrui on 16/7/14.
//

#include "sunrui_jniapplication_JNIUtil.h"

/*
 * Class:     sunrui_jniapplication_JNIUtil
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_sunrui_jniapplication_JNIUtil_getString
  (JNIEnv *env, jobject obj){
    return (*env)->NewStringUTF(env, "来自C的字符串");
 }

/*
 * Class:     sunrui_jniapplication_JNIUtil
 * Method:    getStringC
 * Signature: (I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_sunrui_jniapplication_JNIUtil_getStringC
  (JNIEnv *env, jobject obj, jint order){
    //其他操作
    return (*env)->NewStringUTF(env, "Java_sunrui_jniapplication_JNIUtil_getStringC");
}

java代码中使用

package sunrui.jniapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("NdkJniDemo");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this, JNIUtil.getString(), Toast.LENGTH_LONG).show();
    }
}

编译完成项目后

发布时,将build文件夹里面生成的so文件拷贝到libs里面,然后删除掉jni文件夹

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值