AS jni调用入门(附图)

转载 2016年05月30日 13:20:17

如题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





相关文章推荐

as中jni调用姿势(实战)

一、背景         最近项目中网络请求用到了jni调用c++代码来实现加密的功能,做的过程中踩了一些坑,特此祭奠一下 二、过程        与eclips...

Android Studio下JNI编程(引入外部或AS自行编译so文件)

1. 引用外部so文件 已验证过的引用外部so文件主要有三种方式: 1.1  main目录下创建jniLibs目录,so文件按平台存放于子目录下(最简单方式) 只需在app/src/main目录下创建...

Android AS平台jni环境配置

废话不多说! : 新建一个DurianAsJni的android工程. : 新建一个jni的java接口类: package org.durian.durianasjni; /** * ...

AS2.2使用CMake方式进行JNI/NDK开发

之前写过一篇比较水的文章Android手机控制电脑撸出HelloWorld 里面用到了JNI/NDK技术。这篇文章给大家介绍下JNI/NDK开发。采用的是Android Studio2.2开发环境...

NDK-JNI实战教程(一) 在Android Studio运行第一个NDK程序

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊!NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西;另...

NDK-JNI实战教程(二) JNI官方中文资料

该篇文章完全引用自《JNI完全手册》完整版,用来方便查询查阅,同时作为该系列教程的基础知识。感谢原文档作者。文档所依赖的版本是比较低的,但是恰恰是低版本才能更容易上手学习。

AS上NDK自动生成对应java文件的jni头文件

1.建立好java文件后,运行处class文件。 2.并在这个下面按住shift+右键在这个文件夹打开命令行。 3.运行 javah -classpath . -jni 类名 没问题就OK了

Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

Android 学习笔记——利用JNI技术在Android中调用、调试C++代码 博客分类:  JNI Android android  在Android中调用C++其实就是...

使用ndk-build方式在as调用jni

在比较新的as上,调用jni有一些比较方便的方式比如使用cmake或者使用build工具,参考我博客中其他几篇文章 http://blog.csdn.net/findsafety/article/de...

AS中JNI的使用

AS中JNI的使用 在gradle中配置 ndk { moduleName “JniTest” ldLibs “log”, “z”, “m” ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)