Android studio运行JNI程序以及生成.so文件(Windows下)
来源:互联网 发布:高校教师招聘考试知乎 编辑:程序博客网 时间:2024/06/13 01:54
最近公司要求进行SDK开发,后期会用到JNI开发和生成.so文件,搜集网上资料,踩了几个大坑,终于看到自己想要的结果,先附一张结果图
调用JNI中的方法展示出来的结果
生成的各个平台的so库的结果
下面开始进入主题
1、首先是要配置NDK(若是已经配置过NDK请略过此步骤)
官网下载NDK地址(此地址下载需要翻墙)
若是你翻不了墙请移步至
一个强大的下载网站(Androiddevtools你值得拥有)
下载好之后是个压缩包,应该做什么你应该知道了,然后下面进行第二步
2、配置环境变量
创建NDK_HOME
再将配置好的NDK_HOME添加到PATH环境变量中
配置好之后可以测试是否配置正确 ,打开cmd在里面输入ndk-build
出现上述结果就说明ndk环境变量已经设置成功了,提示信息是因为没有定义NDK_PROJECT_PATH变量,此处用不到,我们暂不处理
3、开始对Android Studio进行NDK环境配置
设置完毕之后,我们的准备工作就结束了,下面就是程序猿最喜欢的事情---写代码了
编码阶段
1、现在AS中创建一个新的工程,然后创建一个新的类JNIUtils
package com.tiancb.ndktest;/*** Created by tiancb on 2016-7-21 14:41.*/public class JniUtils {public native String getStringFormC();}
然后clean project 再rebuild project 生成class文件,这时候打开如下图的文件夹看是否生成了classes文件夹,没有生成请重新来过。
2、打开Tirminal cd到 build\intermediates\classes\debug这个目录下
javah -classpath . -jni com.tiancb.ndktest.JniUtils
注意:此处有坑
网上很多人输入的命令是javah -jni com.tiancb.ndktest.JniUtils,我开始也是输入的这个
但是输入之后会报错 错误: 找不到 'com.tiancb.ndktest.JniUtils' 的类文件。但是明明是有能看到这个类的
后来发现是因为我使用的Android Studio 版本是2.1.2,javah这个命令在android studio2.0之后要用加-classpath
执行完之后你就会看到build\intermediates\classes\debug目录下多了一个com_tiancb_ndktest_JniUtils.h文件
3、在main目录中创建一个jni目录,
将前面的com_tiancb_ndktest_JniUtils.h文件剪切到新建的 jni目录下,然后再创建一个文件命名为jnitest.c
编辑内容如下
#include "com_tiancb_ndktest_JniUtils.h"/* * Class: io_github_yanbober_ndkapplication_NdkJniUtils * Method: getCLanguageString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_tiancb_ndktest_JniUtils_getStringFormC (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!"); }
4、接下来我们要在jni目录下创建Android.mk和Application.mk文件
Android.mk文件内容为
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := appLOCAL_SRC_FILES := jnitest.cinclude $(BUILD_SHARED_LIBRARY)
Application.mk内容为(这个配置是为了生成所有平台的so库,若不配置只会生成armeabi目录下的)
APP_ABI := all
5、配置Gradle
在defaultConfig下,配置ndk:
ndk { moduleName "app" // 生成的so名字 }
在android标签内配置sourceSets:
注意:这里也有坑
若此处没设置会报[Execution failed for task ':app:compileDebugNdk']这个错误
sourceSets.main { jni.srcDirs = ['libs']}
生成的so文件都在src/main/libs目录下。
在Terminal下执行 ndk-build
截止到目前我们的.so库就全部生成了
----------------------------------------分割线--------------------------------------
下面就是对我们的so的使用了
1、在main文件中创建jniLibs 将我们的libs下的so文件拷贝到下面去
2、在JniUtils类中添加代码块
static { System.loadLibrary("app"); //defaultConfig.ndk.moduleName}
3、运行的我们的程序就能看到开始图上的结果了
参考博客:http://www.jianshu.com/p/0c0d37c9a2db
http://blog.csdn.net/yanbober/article/details/45309049
http://www.open-open.com/lib/view/open1451917048573.html
感谢三位大神的分享
------------------------做一个快乐的小顽童------------------------
- Android studio运行JNI程序以及生成.so文件(Windows下)
- Android studio运行JNI程序以及生成.so文件(Windows下)
- android studio下JNI生成so文件
- Android Studio jni编译生成so文件
- android studio之jni(上)生成so文件
- android studio之jni(上)生成so文件
- Android studio下的Android JNI调用以及动态链接库.so的生成
- Android studio 下JNI编程实例并生成so库
- Android studio 下JNI编程实例并生成so库
- 重温android studio jni编译生成so文件
- android studio开发jni无法生成so文件
- Android Studio JNI cmake 不能生成.so文件
- android studio开发jni无法生成so文件
- Android studio下配置ndk以及利用gradle编译生成SO文件
- Android Studio JNI生成so库
- Android studio Jni生成.so 配置build
- android studio NDK开发配置以及生成SO文件
- Android Studio下JNI编程(引入外部或AS自行编译so文件)
- servlet之qq四
- CentOS7YUM安装redis数据库及php-redis扩展
- [VB]SqlHelper|DBHelper数据通用访问类 for VB
- PL/SQL直接在表上修改数据
- 2016 杭电多校2解题报告
- Android studio运行JNI程序以及生成.so文件(Windows下)
- c中in6_addr地址和修改in6_addr地址
- HTML5笔记四:文件及图像上传
- dbus-python 指南
- Log4net的<appender>配置实例
- javabean,servlet,jsp区别联系
- 4.基于数据库表进行认证
- Codeforces Round #325 (Div. 2)
- 表单input中disabled提交后得不到值的解决办法