Andorid 生成NDK动态链接库 .so库
.so库第一次见到是在搜索Android保存静态秘钥等特殊id字段做法时看到的-通过NDK的方式将静态秘钥保存在so文件中, 关于原生开发工具包(NDK)详细见官网指南要更详细,这里我记录我度娘各种结果后的实现.
在工具中添加自定义工具添加javah命令和dnk-build命令


这里name:自定义命令名
Program:$JDKPath$/bin/javah $JDKPath$JDK路径
Parameters:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$ 生成的.h文件命令
Working directory:$ModuleFileDir$/src/main/java 文件生成后存放的目录-这个会在项目一级目录的src/main/java 下生成一个jni文件夹 .h文件就存放在里面
下面添加ndk-build命令:

命令工具添加后 我们先来生成JNIDemo类
public class JNIDemo {
public native void testHello();
public static void main(String[] args){
//加载C文件
System.loadLibrary("TestJNI");
JNIDemo jniDemo = new JNIDemo();
jniDemo.testHello();
}
}

选中java文件右键 通过External Tools生成javah文件,成功后会在/src/main 下生成jni文件夹 .h文件

如上图,.h文件生成后这个时候我们需要自己创建c/c++文件 JNIDemo.cpp 将.h中方法和属性粘贴复制过去
JNIDemo.h

JNIDemo.cpp

这里具体怎么写,其实本人也不知道哈哈哈~,可以搜下相关JNI教程
在 JNIDemo.java-JNIDemo.h-JNIDemo.cpp 文件都有了后 可以开始生成so库,生成so库的时候需要注意 JNIDemo.h、JNIDemo.cpp都需要在上面说的jni文件夹中
并且jni文件夹中还需要增加Android.mk、Application.mk 作为初学者开始连mk文件怎么创建都有些懵 不知道的可以瞧一眼右键New->File->Android.mk 就可以了
生成so库前,需要早gradle.properties:中添加
android.useDeprecateNdk=true

Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := TestJNI
LOCAL_C_INCLUDES := JNIDemo.h
LOCAL_SRC_FILES := JNIDemo.cpp include $(BUILD_SHARED_LIBRARY)
上面必须保证语法还有文件名 引用的模块正确 不然会出错
LOCAL_PATH:源文件路径,宏my-dir由Build System提供,返回包含Android.mk的目录路径
每个Android.mk文件必须以定义LOCAL_PATH为开始,用于开发tree中查找源文件
include $(CLEAR_VARS): 可以参考官方指南~ ~ ~ ~
LOCAL_MODULE:要载入的模块库,与System.loadLibrary("TestJNI")中的参数保持一致
LOCAL_SRC_FILES:要编译的源文件
LOCAL_C_INCLUDES: 要引用的文件 Application.mk:
APP_PLATFORM := android-14
APP_PLATFORM 最低支持版本 这个需要与App的minSdkVersion相对应 到这里基本上没问题了,我们可以选中JNIDemo.cpp文件右键External Tools dnk-build生成库,如果成功的话会生成libs、obj文件夹

到这里生成.so库 大概就是这样,后面还有很多坑,继续入坑~ ~ ~
Andorid 生成NDK动态链接库 .so库的更多相关文章
- Android NDK生成及连接静态库与动态库
对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用.但是在某些情况下,我们需要借助C/C++来写JNI本地代码.比如,在使用跨平台的第三方库的时候:为了提升密集计算性能的时 ...
- 用NDK生成cURL和OpenSSL库
最近在用Qt开发Android应用时需要获取https页面内容,但Qt内置的QNetworkAccessManager类只支持下面这些协议(调用其supportedSchemes成员函数获取): (& ...
- 【开发必备】今天我们来谈谈Android NDK动态链接库(so文件)的一些见解
一.写在前面 直到现在,基本我写的每一个项目都会用到NDK动态链接库的知识,可见这个也的确十分常用.那么,今天,咱们就来谈谈它. 二.什么是ABI和so 1.发展 早起的Android系统几乎只支持A ...
- Qt调用VC++生成的动态链接库
Qt如何调用VC++生成的动态链接库?假设当前有VC++编译器生成的动态库文件testdll.h,testdll.lib和testdll.dll. testdll.h文件源码如下: #ifdef TE ...
- Qt不同版本编译器,调用VC++生成的动态链接库
今天用QT编译生成的共享库自己却怎么都不能调用,查了N久后找到这个帖子,发现搞定了,记录一下 http://qiusuoge.com/12720.html Qt如何调用VC++生成的动态链接库?假设当 ...
- 生成lua的静态库.动态库.lua.exe和luac.exe
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...
- 用NDK调用第三方库
用NDK调用第三方库遇到不少坑,总结一下. 1.添加JNI目录 参考: http://www.cnblogs.com/lanqie/p/7442668.html 2.文件介绍: 其中:JniFacto ...
- 跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
操作环境:Visual Studio 2017 如何实现 使用 C# 进行嵌入式开发? .NET Core 虽然实现了跨平台,但是不可能处处使用 C# 开发,就好像没人使用SQL开发安卓APP,每种语 ...
- VS2013 生成sqlite3动态连接库及sqlite3.dll的调用
一,生成sqlite3动态连接库1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h此处还需要sq ...
随机推荐
- Linux下软件安装的四种方式
一.源码安装 步骤: 下载,解压源码(常见的源码打包格式:.tar.gz/.tar.bz2); 可以直接下载源码再上传至linux服务器,或者在联网状态下,直接通过wget等命令获取源码安装包;源码解 ...
- Git随笔:尝试将本地工程上传至Github上的repository仓库,构建远端与本地协同的Git环境
上传工程至自己的Github公开库,步骤如下: 第1步:建立本地 git 仓库,cd 到你的本地项目根目录下,执行 git init 命令: 第2步:将本地项目工作区的所有文件添加到暂存区.小数点 & ...
- Windows系统命令行下编译连接C/C++源代码方法
Windows系统下编译连接源代码方法:cl -GX test.c-GX: 启动同步异常处理上面的命令会产生可执行程序:test.exe在命令行中直接输入:test.exe 就可运行该程序 Tips: ...
- LeetCode Pascal's Triangle Pascal三角形
题意:给一个数字,返回一个二维数组,包含一个三角形. 思路:n=0.1.2都是特例,特别处理.3行以上的的头尾都是1,其他都是依靠上一行的两个数.具体了解Pascal三角形原理. class Solu ...
- UVA 562 Dividing coins 分硬币(01背包,简单变形)
题意:一袋硬币两人分,要么公平分,要么不公平,如果能公平分,输出0,否则输出分成两半的最小差距. 思路:将提供的整袋钱的总价取一半来进行01背包,如果能分出出来,就是最佳分法.否则背包容量为一半总价的 ...
- IM云服务领域,融云因何得以登上浪潮之巅?
每一次技术驱动下的商业变革都是以浪潮的形式到来,每一次的涨潮都会带着赶上浪潮的企业登上新的巅峰.随着移动互联网的融合发展,短短几年期间,IM通讯云服务从早期的虚无飘渺到如今已经成为现代企业的标配,引发 ...
- Codeforces Round #313 (Div. 2) A.B,C,D,E Currency System in Geraldion Gerald is into Art Gerald's Hexagon Equivalent Strings
A题,超级大水题,根据有没有1输出-1和1就行了.我沙茶,把%d写成了%n. B题,也水,两个矩形的长和宽分别加一下,剩下的两个取大的那个,看看是否框得下. C题,其实也很简单,题目保证了小三角形是正 ...
- CF Gym 100463D Evil (二维前缀和+离散)
题意:给一些带颜色的点,求一个最小的矩形,恰好包括一半的红色点,且不包括蓝色点. 题解:暴力,求个二维前缀和,用容斥原理更新一下.N很小所以我采用了离散优化,跑了个0ms. 之前没写过二维前缀和,加上 ...
- CSS选择器基本介绍
一.web标准 所谓的web标准就是用来衡量我们当前的网页书写是否规范的一系列要求,这个标准是由W3C组织制定,在web标准中具体的要求就是结构.样式.行为三者相分离 结构:通过HTML标签来搭建的网 ...
- 数据库-SQL语法:把一个字段的值设为随机整数
update test2 set zuig = (cast ( ceiling (rand()*9) as int))