关闭

AS jni调用入门(附图)

标签: androidsdkjnindk
2050人阅读 评论(0) 收藏 举报
分类:

如题AS调用jni示例:

一、AS环境配置

1、初始步骤:本人开发环境为AS2.1.1

2、下载NDK,SDK没有下载的小伙伴就自行解决吧(没有NDK的小伙伴在红框的位置会有下载地址,可自行下载)


3、如果没有真机的小伙伴可以下载Genymotion模拟器,安装流程网上大把,有真机的可以忽略。

基础配置基本就这些,下面进行记录下我的第一个NDK项目,附和网上的大篇文章类似,不同在于我会把bug以及详细解决方案给出

二、创建项目

1、这步没什么好说的,new个android 的项目就ok

2、新建文件


public class JniTest {
    static{
        System.loadLibrary("JniTest");//jni模块加载名称
    }
    public native String getJniString();//该方法是红色的,暂时不用理会
}

3、编译生成.class文件


生成目录

4、生成.h文件

(1)首先进入打开Terminal,进入对应的工程目录下,访问build/intermediates/classes/debug目录下



(2)生成头文件,java的环境变量配置这里就不说了,网上一大把,执行命令后不会马上看见.h文件,关闭下debug文件,再重新打开,我们.h文件就会看到了

(3)新建一个jni的存放目录,如图点击后选择finish即可,如果想改变存放目录可根据自己需求操作,然后将刚刚生成的.h文件copy过来,然后新建cpp文件,文件名称随意,然后需要我的操作是copy了一份已经调试成功的c代码片段进行改正如图:


红色部分就是我们要改正的部分,改正后如图:

1、include的替换成我们自己的.h文件名称

2、c代码方法名也对应换成我们.h文件中的方法名

改正后代码:

#include "com_wang_ndk_JniTest.h"
/*
 * Class:     com_wang_ndk_JniTest
 * Method:    getJniString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_wang_ndk_JniTest_getJniString(JNIEnv* env, jobject obj) {
    return env->NewStringUTF("Hello from JNI !");
}

(5)OK到此步骤我们基本都搞定了,感觉比eclipse简单好多,我们下一步要生成.so文件,麻烦的问题来了,不是操作的多麻烦,而是会遇到各种离奇的bug,我们就根据bug提示进行依次修改。

首先进行.so的编译生成,重新build下

1、第一个bug提示

Error:(12, 0) Error: NDK integration is deprecated in the current plugin.  
Consider trying the new experimental plugin.  
For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.  
Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

解决方案:根据bug提示的内容进行配置,配置OK后继续编译


2、第二个bug个有点奇怪,不是每次都出现,如果出现的小伙伴可按这种方式处理。编译过程种提示我无法删除debug文件,根据提示找到了classes下的debug文件,是一个空文件夹,果断删除,却提示我IO异常,最后的解决方法就是关掉AS,去工程文件下把debug文件找到并删除,然后重新进来后再编译,这样就Ok了






3、注意细节的小伙伴已经发现原先我们新建的JniTest类的方法是提示红色的,现在已经没有了,之后我再gradle中加入调用模块名称

此名称应与loadLibaray种调用的名称一致

static{
    System.loadLibrary("JniTest");//jni模块加载名称
}

4、调用,运行OK





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2077次
    • 积分:30
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行