Android工程文件夹中,我们可以通过jni机制来调用c/c++编写的本地共享库,例如libtest.so
在java文件中声明一个静态的调用,和共享库中要调用的函数
test.java中
static{
system.loadlibrary("test");
}
static native int test(int i);
相应在相关的c/c++ 文件中按照jni的编写规则编写即可,Android自己增加了一个当loadlibrary时会调用jni_onload , jni_unload函数,这个不是重点。
我要提供的是so文件交叉编译的方法。
Android提供了ndk及相关mk文件的写法用来给编程人员编写c/c++本地文件,但我看了一下并不习惯这种编译方式,懒得去弄明白。所以决定还是按照原来的交叉编译方式进行
1.首先在源码中寻找/prebuild/linux-x86/tooltrain/arm-eabi-4.x.1/bin/这个目录下的编译文件,在~/.bashrc中将编译使用的gcc, g++, ar等定义相应变量cc,cpp,ar为arm编译器,并在make file中使用相应变量来编译
2.在编译so时要加上 -nostdlib 参数,不然系统会去链接标准库发生ld的错误
例如: $CPP -shared -nostdlib -fpic -o libtest.so -c test.o (test.c 生产test.o文件时需要-I 源码中的dalvik/libnativehelper/include/nativehelper文件夹,不然会因缺少头文件导致编译失败)
3.将生产的so文件拷贝到工程 /libs/armeabi/ 下,调用即可
解释几个基本概念:
1. 在linux中用ar -cvr -o libabcd.a ab.o cd.o 编译会生成.a文件,这个称为静态库或归档库,可以在编译的时候加入.a一起编译,(gcc -o main main.o -L. -labcd)运行时程序会copy静态库中的代码段。-L后面跟静态库所属目录,-l后为静态库名称,系统会自动过滤掉lib 和.a
2. .so文件生成 gcc -shared -fpic -o libabcd.so libabcd.a
so文件为共享库,相当于dll,在运行时要调用时才去加载共享库中代码 可执行文件编译方式与.a类似。
3.为什么要加入nostdlib,因为Android没有用linux的libc库,而是使用自己的c函数库
分享到:
相关推荐
找了很久,积分花了不少,没一个好用的,要么是标题党,要么架构不全,...现在分享出来让那些坑积分的去shi吧.支持https,udp,rtp,支持所有音视频格式,包含完整齐全的架构:arm64-v8a、armeabi、armeabi-v7a、x86、x86_64
通常,SDK包含了一个jar包(如:wechat-sdk-android-without-mta-x.x.x.jar)和一个lib目录,lib目录中的so文件是针对不同CPU架构的库。将jar包添加到项目的构建路径,并确保将对应CPU架构的.so文件复制到项目的jni...
DEX、RES、SO 库等文件是 Android APK 的主要文件,对这些文件进行加密可以有效防止 APK 被破解和反编译。通过爱加密 APK 源代码安全保护平台,对 Android APK 进行安全保护,最后下载 APK 包再次完成签名,就可以...
分享功能则是指用户能够将应用内的内容或链接分享至第三方平台,以此来增加应用的曝光度和传播性。 #### 使用Cordova实现第三方登录与分享的优势 Cordova是一种允许开发者使用HTML、CSS和JavaScript编写跨平台移动...
但是,需要注意的是,由于GIF文件通常较大,过度使用可能会增加应用的内存消耗和启动时间,因此在使用时要适度并考虑优化。 总之,`GifImageView`是Android开发中的一个实用工具,通过它我们可以轻松地在应用中集成...
2. **替换lib文件**:压缩包中的`lib`目录可能包含更新或优化过的动态链接库(.so文件)或者其他的库文件。这些库文件对于某些特定功能的实现或性能提升至关重要。例如,更新GPU驱动库可以改善图形处理性能,优化编...
在提供的文件列表中,“libBMapApiEngine_v1_3_3.so”是一个动态链接库文件,通常用于Android平台。这个库文件包含了百度地图SDK的一部分功能,可能包含了获取经纬度的底层实现。在Android应用开发中,通过添加这个...
混淆过程中还需要考虑第三方服务和库,如Umeng分享统计。为避免混淆导致的问题,可以使用`-dontwarn`指令忽略警告,以及`-keep`指令保留特定方法,如: ``` -dontwarn android.support.v4.** -dontwarn org.apache....
APK文件通常包含应用程序的代码、资源文件(如图片、音频、布局XML等)、库文件(如.so文件)以及应用的清单文件(AndroidManifest.xml)。 2. **夸克浏览器**:夸克浏览器是由阿里巴巴旗下的UC优视公司开发的一款...
APK加固是一种为Android应用程序提供额外安全层的技术,其目的在于通过各种手段保护应用免受未经授权的逆向、篡改、重打包以及信息泄露等威胁。APK加固方案通常包括资源保护、代码混淆、签名保护、安全存储等多个...
- **禁止调试**:在Android平台上,对.so文件进行调试禁止,可以防止恶意攻击者通过调试接口获取敏感信息。 - **公钥加密**:在网络请求时,解密后的密码会被立即用专门的公钥加密,确保在网络传输过程中密码的...
8. **NDK编译为SO库**:NDK(Native Development Kit)是Android开发工具,允许开发者用C++编写原生代码,并将其编译为.so动态链接库,供Android应用程序调用。这样可以利用C++的性能优势,并且减少内存消耗。 9. *...
此外,可能还有应用的资源文件(如图片、字体、音频等)、配置文件(如XML)、库文件(如.dex或.so)、以及可能的文档和帮助文件,用于介绍如何使用该应用。 在这个应用中,我们可以推测出以下知识点: 1. **安卓...
2. 将编译后的库文件(如.a或.so)添加到项目的库路径中。 3. 配置项目的构建系统(如CMake或Xcode),确保链接到libqrencode库。 接下来,创建二维码控件的核心是使用DrawNode来绘制显示区。DrawNode是Cocos2d-x中...
在实际操作过程中,白彦庚分享了一些遇到的问题,包括smalihook技术的局限性、利用so动态库实现功能、利用反射机制调用功能以及通过so发送短信的挑战。这些问题的解决需要白彦庚和他的团队不断优化火眼系统的架构和...
在Android开发中,我们可以集成ZBar的SO文件(针对Android的本地库)来实现二维码的解析。将ZBar的库添加到项目中后,我们需要编写Java代码来调用其API,进行图像捕获、解码并处理扫描结果。 1. **图像捕获**:通常...
在JNI层,`libwq_core.so`是一个动态链接库文件,它是Android系统中的本地库。在Android应用开发中,JNI允许Java代码直接调用C/C++原生代码,提升性能或者使用非Java语言编写的功能,如加密解密算法。在这个例子中,...
1. **系统库**:包含了运行Android系统所需的各种动态链接库文件(.so),它们支持应用程序和服务的正常运行。 2. **框架服务**:这是Android系统的骨架,包括了系统服务、权限管理、广播接收器等关键组件。 3. **...