AndroidStudio如何快速制作.so
之前写过一篇Eclipse制作.so的文章,http://blog.csdn.net/baiyuliang2013/article/details/44306921使用的是GNUstep模拟Linux环境,过程现在看来是想相当麻烦,后来发现一个简单的方法就是通过项目右键添加Native
Supprot...可以快速创建.so而不使用命令行,
由于AS越来越被大家使用,所以Eclipse的制作过程就不再写了,这篇主要讲的是如何用AS快速制作一个简单的.so文件!
如果之前对制作.so一点了解也没有的话,在看这一篇之前可以看下文章开头提到的文章,会对这篇文章的理解上有所帮助,因为本篇文章不打算讲解的太过详细!
步骤1:
创建一个新的AS项目(模板选择EmptyActivity即可)jnitest,包名:com.byl.jnitest:
步骤2:
添加NDK支持:
按Ctrl+Alt+Shift+S,出现如图:
ok,完成后,打开项目根目录下的local.properties文件:
ndk的路径会自动添加进来,表示操作成功!
步骤3:
打开根目录下gradle.properties文件,添加代码:
android.useDeprecatedNdk=true
步骤4:
项目>app>src>main文件夹下,新建jni文件夹,并放入三个文件.h、.c、.c:
注意:
.h文件命名的命名方式,包名+调用.so的Activity名且"."需要更换成下滑线"_";
jnitest.c的命名可以随便定义;
util.c是一个空的.c文件,作用就是在ndk编译时避免一个错误:
make.exe: *** No rule to make target
com_byl_jnitest_MainActivity.h:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_byl_jnitest_MainActivity */ #ifndef _Included_com_byl_jnitest_MainActivity #define _Included_com_byl_jnitest_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_byl_jnitest_MainActivity * Method: getSec * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_byl_jnitest_MainActivity_getSec (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
jnitest.c:
#include <string.h> #include <jni.h> jstring Java_com_byl_jnitest_MainActivity_getSec (JNIEnv* env,jobject thiz){ return (*env)->NewStringUTF(env,"调用jni成功"); }
步骤5:
在MainActivity中调用.so:
public static native String getSec();//.so中的方法名 static{ System.loadLibrary("jnitest"); }
注意:.so最终的名称默认为lib+项目名如:libjnitest.so。
步骤6:
最后一步,打开app目录下build.gradle(注意是app目录下而不是根目录下)文件,修改gradle配置:
defaultConfig { applicationId "com.byl.jnitest" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk { moduleName "jnitest" ldLibs "log", "z", "m" abiFilters "armeabi" } }
以上步骤全部完成后,直接点击run>>:
运行必然要报错的,因为之前.so文件并不存在,经此一调,ndk便自动为我们生成了想要的东西:
将.so文件复制出来,然后在main文件夹下建立jniLibs/armeabi,并将.so放入:
再次运行>>:
此例只是简单的输出一个字符串,一般的项目放入一个不想外露的密钥之类的还是非常有用的!
另:多种cpu类型,可在abiFilters后添加cpu类型即可,如:
ndk { moduleName "jnitest" ldLibs "log", "z", "m" abiFilters "armeabi","x86" }
运行结果:
AndroidStudio如何快速制作.so的更多相关文章
- Photoshop将普通照片快速制作二次元漫画风格效果
今天为大家分享Photoshop将普通照片快速制作二次元漫画风格效果,教程很不错,对于喜欢漫画的朋友可以参考本文,希望能对大家有所帮助! 一提到日本动画电影,大家第一印象肯定是宫崎骏,但是日本除了宫崎 ...
- 【公开课】《奥威Power-BI基于微软示例库(MSSQL)快速制作管理驾驶舱》文字记录与反馈
本期分享的内容: <奥威Power-BI基于微软示例库(MSSQL)快速制作管理驾驶舱> 时间:2016年11月02日 课程主讲人:叶锡文 从事商业智能行业,有丰富的实施经验,擅长 ...
- 10月26日 奥威Power-BI基于微软示例库(MSOLAP)快速制作管理驾驶舱 腾讯课堂开课啦
本次课是基于olap数据源的案例实操课,以微软olap示例库Adventure Works为数据基础. AdventureWorks示例数据库为一家虚拟公司的数据,公司背景为大型跨国生产 ...
- HTML第二部分表单及使用Photoshop快速制作网页
一.表单 <form id="" name="" method="post/get" action="负责处理的服务端&qu ...
- 如何用Axure快速制作APP交互原型
对于产品经理来说,熟练使用一些常用软件是一项十分必要的技能.其中,作为一个专业的快速原型设计工具,Axure RP无疑在产品人心中拥有一个难以撼动的地位.但就要PS一样,虽然足够专业,但同样也会存在使 ...
- PS快速制作下雪效果
PS快速制作下雪效果 具体的制作步骤如下: 1.打开PS,打开素材,打开窗口-动作 2.创建新动作,参数如下图 3.回到图层,建立一个图层,填充黑色,如下图 4.滤镜-像素化-点状化,参数如下图 5. ...
- 如何使用Python快速制作可视化报表----pyecharts
如何使用Python快速制作可视化报表 数据可视化能力已经越来越成为各岗位的基础技能.领英的数据报告显示,数据可视化技能在2017年中国最热门技能中排名第一. 就数据分析而言,可视化探索几乎是你正 ...
- PS基础教程[6]如何快速制作一寸照片
一寸照片使我们经常会用到的,很多的证件照都是使用一寸的照片作为存档的.写这个经验也是因为刚刚有网友求助做一寸照片,所以就顺便写个经验.废话不多说了,进入正题,PS基础教程之快速制作一寸的照片. 制作方 ...
- h5快速制作工具-企业级. 非个人无水印
Epub360 Epub是团队引入的专业级H5应用开发工具,能够快速制作出高质量的H5运营交互页面,具有动画控制.交互设定.社交应用和数据应用的特点,其制作过程就类似于制作一个PPT,比较容易上手. ...
随机推荐
- 【LA 3027 Corporative Network】
·一些很可爱的询问和修改,放松地去用并查集解决. ·英文题,述大意: 输入n(5<=n<=20000)表示树有n个节点,并且会EOF结束地读入不超过 20000个操作,一共有两种: ...
- 例10-1 uva11582(裴波那切数列)
题意:你的任务是计算f(a^b)除以n的余数.其中f(0)=f(1)=1,且对于所有非负整数i,f(i+2)=f(i+1)+f(i). 思路: 由于是模运算,因此整个序列肯定会出现重复序列,所以先找出 ...
- Java多线程基础总结
一.线程和进程关系 二.创建方式1.继承Thread类,重写run方法2.实现Runable接口,重写run方法3.使用匿名内部类 三.API接口start()currentThread() 获取当前 ...
- ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档]
ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档] 简介 简单地说就是该有的都有了,但是总体跑起来效果还不好. 还在开发中,它工作的效果还不好.但是你可以直 ...
- Spring中的InitializingBean接口的使用
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法. 测试,如下: imp ...
- (概念)多个CPU和多核CPU以及超线程(Hyper-Threading)
引言 在这篇文章中我会主要介绍CPU相关的一些重要概念和技术.如果你想更好地了解操作系统,那就从本文开始吧. 中央处理器(Central processing unit) 在我们了解其它概念之前,我们 ...
- 在java中String类为什么要设计成final
在java中String类为什么要设计成final? - 胖胖的回答 - 知乎 https://www.zhihu.com/question/31345592/answer/114126087
- rw 模板设置
在编译的时候只有写出rw之后使用alt+/就可以将模板代码全部展现出来. rw读写模板代码: InputStream in = null; OutputStream out = null; try { ...
- Openlayers3学习心得(初识)
最近刚辞了原来的那家公司,准备新找一份工作.其中有个公司要求会Openlayers3.一看到这个要求,就知道公司业务涉及地图图表比较多. Openlayers本身是一个基于GIS地图相关的功能丰富的J ...
- Swift 3.0项目迁移的一些记录
刚执行完Convert后报错600+,真是令人奔溃. 之后重新编译,仔细分析后发现其实真实错误远没有那么多.最终实际修改到的错误也就几十个,而且其中某些还是同一种错误. 这个项目是一个供自己使用的浏览 ...