本文主要参考blog:http://blog.csdn.net/jkan2001/article/details/54316375

下面是本人结合blog生成so包过程中遇到一些问题和解决方法

(1)新建一个android项目,增加native方法

 package update.smartapp.com.myso;

 /**
* Created by qinpeizhou on 17-5-12.
*/ public class JNIUtils {
static {
System.loadLibrary("NativeExample");
} public static native String getStringFromNative(); }

(2)执行Build->Make Project方法

执行完这一步后,我们会在项目的app\build\intermediates\classes\debug路径下发现编译成功的项目class文件

(3)生成jni包和.h文件

   方法一:

进入src/main/java文件夹

  qinpeizhou@qinpeizhou-PC:~/Documents/AsDemo/MySO$ cd app/src/main/java

执行命令生成jni包和.h文件

  javah -d jni update.smartapp.com.myso.JNIUtils

然后把java包里面的jni包拖到main包里面否则在app\build\intermediates生成不了ndk这个包

  方法二:

进入src/main文件夹

  qinpeizhou@qinpeizhou-PC:~/Documents/AsDemo/MySO$ cd app/src/main

再输入javah -d jni -classpath [你的sdk路径]\platforms\Android-22\android.jar;….\build\intermediates\classes\debug [你的包名+包含native方法

  qinpeizhou@qinpeizhou-PC:~/Documents/AsDemo/MySO$ javah -d jni -classpath \home\qinpeizhou\Documents\android-sdk-macosx\platforms\Android-22\android.jar;..\..\build\intermediates\classes

  \debug  com.exmple.root.solo.NativeUtils

这个生成的jni包是在main下的,强烈建议NDK版本选r9+的最好不用r13版本的,因为r13我用的报错不断~

(5)实现.h中的方法

拷贝自动生成的.h方法,到jni里,并重命名为main.c,并编写main.c中的代码,实现native方法

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class update_smartapp_com_myso_JNIUtils */ #ifndef _Included_update_smartapp_com_myso_JNIUtils
#define _Included_update_smartapp_com_myso_JNIUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: update_smartapp_com_myso_JNIUtils
* Method: getStringFromNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_update_smartapp_com_myso_JNIUtils_getStringFromNative
(JNIEnv *env, jclass jobj){
return (*env)->NewStringUTF(env,"Hello From JNI!");} #ifdef __cplusplus
}
#endif
#endif

注意!这里会报错

 Error:Execution failed for task ':app:compileDebugNdk'.
> Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio. Please switch to a supported build system.

这是因为我们没有配置NDK路径的问题

(5)配置NDK路径等等

打开Project的local.properties文件添加NDK路径ndk.dir=C\:\\work\\sorfware\\android\\android-ndk-r10e
在gradle.properties添加android.useDeprecatedNdk=true
在app路径的build.gradle 的defaultconfig中添加

ndk {
moduleName "NativeExample" //设置库(so)文件名称
ldLibs "log", "z", "m" //添加系统库
abiFilters "armeabi", "armeabi-v7a", "x86" //生成3中类的.so文件
}

注意:注意在jni包内添加空.c文件或者.c文件的mian函数会报main函数重复问题,main函数重复就把该.c文件的main函数改成main1.c等等

(6)使用.so文件

在本项目中使用.so文件,首先在main包下创建jniLibs包把.so文件所在的armeabi,armeabi-v7a,x86包都复制在里面

调用native方法

JNI初级:android studio生成so文件详细过程的更多相关文章

  1. android studio 编译NDK android studio 生成.so文件

    详细配置使用请移步:https://www.jianshu.com/p/4c7d9a10933b android studio NDK 编译 第一步: app/build.gradle下面 添加代码: ...

  2. 解决Android studio生成H文件时报找不到类文件错误

    今天整理思路时觉得在native直接调用java的方法显示这个办法挺不错 于是就用到了生成H文件 可能我的编译环境和他们的不一样 网上的教程如下 javah -d ../jni com.jm.prom ...

  3. Android Studio生成keystore签名文件步骤讲解

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

  4. ubuntu下android studio生成的unaligned apk的zipalign处理

    在ubuntu系统中使用android studio生成的apk文件始终都是unaligned apk, 在bulid.gradle中设置如下设置后,还是同样生成的是unaligned apk. mi ...

  5. Android Studio 生成 keystore 签名文件

    Android Studio 生成 keystore 签名文件 常见 SSL 证书格式 : .DER .CER,文件是二进制格式,只保存证书,不保存私钥. .PEM,一般是文本格式,可保存证书,可保存 ...

  6. Android Studio生成javadoc出错的解决办法

    一般使用Android Studio生成javadoc会有两个问题: 空指针异常 文档乱码 解决办法如下: 第1个问题:Tools --> Generate JavaDoc -->打开对话 ...

  7. android 无法生成R文件的原因剖析

    android 无法生成R文件 是件痛苦的事情,即使有时候你xml文件没有错误,他都无法生成.针对此问题,我总结以下几个方面的原因. 一.xml本身有错误 R.java这个文件是会自动生成的,但是如果 ...

  8. Co-Debugging JNI with Android Studio and Visual Studio

    Tutorials > Android > Integration with other tools > Co-Debugging JNI with Android Studio a ...

  9. android studio生成aar包

    android studio生成aar包并在其他工程引用aar包 http://blog.csdn.net/getchance/article/details/47257389 用Android st ...

随机推荐

  1. [Luogu2135] 方块消除【区间Dp】

    Online Judge:P2135 方块消除(这题不用预处理) Label:区间Dp 题目描述 Jimmy最近迷上了一款叫做方块消除的游戏.游戏规则如下:n个带颜色方格排成一列,相同颜色的方块连成一 ...

  2. Luogu P1041 传染病控制(搜索)

    P1041 传染病控制 题意 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这 ...

  3. JOIN方法也是连贯操作方法之一

    JOIN方法也是连贯操作方法之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据. 大理石平台规格 join通常有下面几种类型,不同类型的join操作会影响返回的数据结果. INNER JO ...

  4. Django 补充知识

    目录 Django基于配置文件的编程思想 初步实现 大佬实现 跨站请求伪造csrf 什么是csrf? 前端如何解决 ajax解决 csrf相关的装饰器 FBV方式装饰器 CVB方式装饰器 Django ...

  5. 莫烦PyTorch学习笔记(三)——激励函数

    1. sigmod函数 函数公式和图表如下图     在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率.sigmod函数 ...

  6. 为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字)

    为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字) 在PyData Seattle 2017中,Jake Vanderplas介绍了Python的发展历程以及最新动态.在这里我们把 ...

  7. apache netbeans不再集成tomcat

    老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...

  8. tar指令集合

    把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个, ...

  9. 《DSP using MATLAB》Problem 8.17

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  10. HTML编码的用户输入------阻止向Controller的方法传入参数时用链接注入javascript代码或者HTML标记