Android JNI之动态创建native

1、环境配置

      1)确定android studio里安装了ndk,可以按照下面的图查看。

 2)系统环境变量配置,根据自己电脑路径配置

                            

                                       

2、动态创建native

    1)新建一个android studio工程,然后在gradle.properties里增加如下语句。

     

   2)在MainActivity平级目录下新建一java文件,内容如下:

package com.example.myjnidemotest2;public class JniUtils {    static{        System.loadLibrary("native-lib");    }    public static native String getStringFromJni();    public static native int getAddResultFromJni(int a, int b);}

  3) 在main下面新建jni目录

4)在jni目录下新建三个文件,一个cpp文件,两个mk文件。 cpp文件是实现具体功能的,是用C++实现的。

     cpp文件内容

#include #include #include#include using namespace std;#ifdef __cplusplusextern "C" {#endifstatic const char *className = "com/example/myjnidemotest2/JniUtils";JNIEXPORT jstring JNICALL JniSay(JNIEnv *env, jobject obj) {    return env->NewStringUTF("Hello From JNI!!!");}JNIEXPORT jint JNICALL addInJni(JNIEnv *env, jobject obj, jint a, jint b) {    return a + b;}static JNINativeMethod gJni_Methods_table[] = {        {"getStringFromJni", "()Ljava/lang/String;", (void*)JniSay},        {"getAddResultFromJni", "(II)I", (void*)addInJni},};JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved){    JNIEnv* env = NULL;    jint result = -1;    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {        return result;    }    jclass clazz = (env)->FindClass( className);    if (clazz == NULL){        return -1;    }    if ((env)->RegisterNatives(clazz, gJni_Methods_table, sizeof(gJni_Methods_table) / sizeof(gJni_Methods_table[0])) < 0)    {        return -1;    }    return JNI_VERSION_1_4;}#ifdef __cplusplus}#endif

    Android.mk文件内容

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := native-libLOCAL_SRC_FILES := ImplementFuns.cppinclude $(BUILD_SHARED_LIBRARY)

    Application.mk文件内容

APP_ABI := all

5)在app的build.gradle里增加如下内容

6)调用JNI接口,我是在MainActivity里调用的。

package com.example.myjnidemotest2;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.d("wujiang", "from jni str = " + JniUtils.getStringFromJni());        Log.d("wujiang", "a + b = " + JniUtils.getAddResultFromJni(4, 9));    }}

7)编译运行就ok了,我的运行结果

                                                      THE    END

更多相关文章

  1. 【Android(安卓)Developers Training】 36. 设置文件共享
  2. android动态加载外部资源文件
  3. Android(安卓)Studio 教程(干货)
  4. Android(安卓)7.0的新特性
  5. adb and App
  6. Android高级的总结
  7. Windows下,Ant自动化编译Android项目具体步骤和方法
  8. Android(安卓)SDK 实例代码分析---Accelerometer Play(一)
  9. Android(安卓)Studio中生成aar之包括*.jar,*.aar和*.so文件

随机推荐

  1. sqlserver数据库获取数据库信息
  2. c#连接数据库及sql2005远程连接的方法
  3. sqlserverdriver配置方法 jdbc连接sqlser
  4. sql获取分组排序后数据的脚本
  5. 使用mongovue把sqlserver数据导入mongodb
  6. sql server自动生成拼音首字母的函数
  7. sqlserver实现oracle的sequence方法
  8. sql中count或sum为条件的查询示例(sql查
  9. mssql使用存储过程破解sa密码
  10. 没有sa密码无法集成windows身份验证登录