JNI初级:android studio生成so文件详细过程
本文主要参考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文件详细过程的更多相关文章
- android studio 编译NDK android studio 生成.so文件
详细配置使用请移步:https://www.jianshu.com/p/4c7d9a10933b android studio NDK 编译 第一步: app/build.gradle下面 添加代码: ...
- 解决Android studio生成H文件时报找不到类文件错误
今天整理思路时觉得在native直接调用java的方法显示这个办法挺不错 于是就用到了生成H文件 可能我的编译环境和他们的不一样 网上的教程如下 javah -d ../jni com.jm.prom ...
- Android Studio生成keystore签名文件步骤讲解
Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...
- ubuntu下android studio生成的unaligned apk的zipalign处理
在ubuntu系统中使用android studio生成的apk文件始终都是unaligned apk, 在bulid.gradle中设置如下设置后,还是同样生成的是unaligned apk. mi ...
- Android Studio 生成 keystore 签名文件
Android Studio 生成 keystore 签名文件 常见 SSL 证书格式 : .DER .CER,文件是二进制格式,只保存证书,不保存私钥. .PEM,一般是文本格式,可保存证书,可保存 ...
- Android Studio生成javadoc出错的解决办法
一般使用Android Studio生成javadoc会有两个问题: 空指针异常 文档乱码 解决办法如下: 第1个问题:Tools --> Generate JavaDoc -->打开对话 ...
- android 无法生成R文件的原因剖析
android 无法生成R文件 是件痛苦的事情,即使有时候你xml文件没有错误,他都无法生成.针对此问题,我总结以下几个方面的原因. 一.xml本身有错误 R.java这个文件是会自动生成的,但是如果 ...
- Co-Debugging JNI with Android Studio and Visual Studio
Tutorials > Android > Integration with other tools > Co-Debugging JNI with Android Studio a ...
- android studio生成aar包
android studio生成aar包并在其他工程引用aar包 http://blog.csdn.net/getchance/article/details/47257389 用Android st ...
随机推荐
- 编写Reduce处理逻辑
- [模拟退火][UVA10228] A Star not a Tree?
好的,在h^ovny的安利下做了此题 模拟退火中的大水题,想当年联赛的时候都差点打了退火,正解貌似是三分套三分,我记得上一道三分套三分的题我就是退火水过去的... 貌似B班在讲退火这个大玄学... 这 ...
- Apache下更改.htaccess文件名称
有时候我们需要更改.htaccess的名称以解决一些问题 比如:Eclipse下是不显示点开头的文件的 所以我们可以使用 Apache的AccessFileName来更改此配置文件的名称 Acces ...
- configparser 配置文件模块
#_author:star#date:2019/11/7# configparser 配置文件模块import configparserconfig=configparser.ConfigParser ...
- Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能
Serverless Kubernetes概述: 阿里云Serverless Kubernetes容器服务最新开放香港.新加坡.悉尼区域,同时全面开放2.0架构,帮助用户更加便捷.轻松地步入“以应用为 ...
- R语言数据预处理
R语言数据预处理 一.日期时间.字符串的处理 日期 Date: 日期类,年与日 POSIXct: 日期时间类,精确到秒,用数字表示 POSIXlt: 日期时间类,精确到秒,用列表表示 Sys.date ...
- IDEA中log4j 无法输出到本地,properties配置无效问题。
log4j添加以后无法输出日志信息,经检查(按以下顺序): 1.jar包导入正常 2.log4j.properties配置文件正常 3.logger.info可以输出,但是properties文件无效 ...
- Python学习之while练习--九九乘法表
效果如下: 实现代码; m = 1n = 1while(m<10): while(n<=m): print(n,"*",m,"=",m*n,end ...
- SDOI2019 R2退役记
还是退役了呀 Day -1 早上loli发了套题结果啥都不会 之后胡爷爷就秒了道数据结构 不过也没什么人做,于是全机房都在愉快的划水 下午来机房打了场luogu的\(rated\)赛,还是啥都不会 之 ...
- springcloud(四):Eureka的配置详解
在Eureka的服务治理体系中,主要分为服务端和客户端两个不同的角色,服务端为服务注册中心,客户端为提供各个接口的微服务应用,这里介绍一下Eureka的配置. Eureka服务端配置 在实际应用中,我 ...