Android Studio中使用NDKJNI

    xiaoxiao2021-12-14  19

    Android Studio中使用NDK/JNI

    之前试过用eclipse配置过NDK/JNI,现在基本开发用Android Studio了,所有现在也用AS配置下。

    1. 下载NDK,配置NDK。

    从网上下载NDK包,解压,放到自己喜欢的位置。我是放到sdk目录下了。

    打开AS,先随便打开个项目,依次点击:File ->ProjectStructure,然后如下图,选择ndk到你解压的路径。

    这样第一步就好了。

    2. 创建项目。

    先新建一个项目,按照正常方式就好。 我建的项目名叫ndkDemo 。 然后一路next .

    稍微修改下布局,便于后面显示

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.ndkdemo.MainActivity"> <TextView android:id="@+id/tv_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </LinearLayout>

    然后再看主MainActivity代码

    这里,我们加上个native的方法,这个方法就是我们要调用的C++方法,用于获取个字符串。

    public native String getStringFromNative();

    然后下面两个是调用。

    System.out.println(getStringFromNative()); Toast.makeText(this, getStringFromNative(), Toast.LENGTH_LONG).show();

    3. 编译出中间代码

    这时我们Make Project一下项目

    这里Make Project一下,是为了生成.calss下的文件。

    然后就要用到我们的命令行了。

    进来后默认是指向当前的工程目录,接下来输入命令:cd app\src\main 回车,切换到main目录下:如图:

    然后运行javah命令 :javah -d jni -classpath D:\code\sdk\platforms\android-22\android.jar;….\build\intermediates\classes\debug com.example.administrator.ndkdemo.MainActivity

    其中

    运行后,再看我们的项目结构,就会发现对了些代码

    打开发现已经有了中间代码

    4. 编写C++代码

    创建jni文件夹下创建jni.c文件

    写入代码

    #include "com_example_administrator_ndkdemo_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_example_administrator_ndkdemo_MainActivity_getStringFromNative (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,"NDK 测试成功"); }

    其中

    Java_com_example_administrator_ndkdemo_MainActivity_getStringFromNative方法要和头文件中的一致。

    最后在运行前要配置下gradle文件

    ndk{ moduleName “MyJni” ldLibs “log” abiFilters “armeabi”, “armeabi-v7a”, “x86” }

    然后看下gradle.properties中是否加入了下面这句话

    android.useDeprecatedNdk=true

    5. 运行

    哈哈,看到弹出的提示了吧,这个字符串就是来自C++的。

    源代码地址:http://download.csdn.net/detail/jfzl123/9703140

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

    最新回复(0)