so文件是手机的一些运行库文件,在系统lib的文件夹下,置换移植其他系统的程序也需要修改更换相关so文件;没有它系统软件不能运行,哪部分损坏就影响相对功能,电话接打,通讯录,相机等等都是要依赖so文件使用的。so文件需要资深安卓大师更改,一般都是现成的搬运移植,打开它没有什么意义。安卓手机想要查看so文件就需要下载Native Libs Monitor。
so是shared object的缩写,见名思义就是共享的对象,机器可以直接运行的二进制代码。大到 *** 作系统,小到一个专用软件,都离不开so。so主要存在于Unix和Linux系统中。so是与平台相关的二进制机器码,Android应用支持的cpu架构取决于APK中位于lib或jniLib目录中的so文件。
由于Android基于Linux Kernl的,也继承了Linux中所有so相关的设计。
除了系统方面的原因,Android开发者还要知道以下几点:
so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码。
so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快。
so内存分配不受Dalivik/ART的单个应用限制,减少OOM。各类的百度网盘搜索引擎:
1:搜盘盘:
>
2017学渣逆袭班-有道 最新课程百度网盘下载
链接:>pwd=1234
提取码:1234
简介:高中数学优质资料下载,包括:试题试卷、课件、教材、视频、各大名师网校合集。
Android中加载so文件的提供的API:void Systemload(String pathName);
说明:
1、pathName:文件名+文件路劲;
2、该方法调用成功后so文件中的导出函数都将插入的系统提供的一个映射表(类型Map);
看到以上对Systemload(String pathName);的函数说明可定有人会想到将so文件放到一个指定的目录然后再通过参数pathName直接引用该目录的路劲和对应的so文件问题不就解决了吗?
这里有个问题被忽略了,那就是Systemload只能加载两个目录路劲下的so文件:
1、/system/lib ;
2、安装包的路劲,即:/data/data/<packagename>/…
而且这两个路劲又是有权限保护的不能直接访问;
问题解决方法:
先从网络下载so文件到手机目录(如:/test/device/testso) –> 将testso加载到内存(ByteArrayOutputStream) –> 然后保存到对用安装包目录;
具体代码如下:
try {
String localPath = EnvironmentgetExternalStorageDirectory() + path;
Logv(TAG, “LazyBandingLib localPath:” + localPath);
String[] tokens = mPatternssplit(path);
if (null == tokens || tokenslength <= 0
|| tokens[tokenslength - 1] == “”) {
Logv(TAG, “非法的文件路径!”);
return -3;
}
// 开辟一个输入流
File inFile = new File(localPath);
// 判断需加载的文件是否存在
if (!inFileexists()) {
// 下载远程驱动文件
Logv(TAG, inFilegetAbsolutePath() + ” is not fond!”);
return 1;
}
FileInputStream fis = new FileInputStream(inFile);
File dir = contextgetDir(“libs”, ContextMODE_PRIVATE);
// 获取驱动文件输出流
File soFile = new File(dir, tokens[tokenslength - 1]);
if (!soFileexists()) {
Logv(TAG, “### ” + soFilegetAbsolutePath() + ” is not exists”);
FileOutputStream fos = new FileOutputStream(soFile);
Logv(TAG, “FileOutputStream:” + fostoString() + “,tokens:”
+ tokens[tokenslength - 1]);
// 字节数组输出流,写入到内存中(ram)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = fisread(buffer)) != -1) {
baoswrite(buffer, 0, len);
}
// 从内存到写入到具体文件
foswrite(baostoByteArray());
// 关闭文件流
baosclose();
fosclose();
}
fisclose();
Logv(TAG, “### Systemload start”);
// 加载外设驱动
Systemload(soFilegetAbsolutePath());
Logv(TAG, “### Systemload End”);
return 0;
} catch (Exception e) {
Logv(TAG, “Exception ” + egetMessage());
eprintStackTrace();
return -1;
}
《雪满庭》百度网盘高清资源免费在线观看
mevc
该小说讲述了在一个大雪纷飞的日子,誉满天下的兰陵萧氏一族被满门抄斩。幼女萧姮被忠仆救出,历经坎坷,流落至霸陵侯府成了一名灶下婢那边厢,世人皆道,霸陵侯世子年少英华,一身玉色罗袍、执秋水长剑。意静神遐中透着满身的孤高自诩,目下无尘。可惜啊可惜,幼帝登基,奸臣当道,霸陵候战败于北戎,霸陵侯世子指婚灶下婢。
该小说讲述了在一个大雪纷飞的日子,誉满天下的兰陵萧氏一族被满门抄斩。幼女萧姮被忠仆救出,历经坎坷,流落至霸陵侯府成了一名灶下婢那边厢,世人皆道,霸陵侯世子年少英华,一身玉色罗袍、执秋水长剑。意静神遐中透着满身的孤高自诩,目下无尘。可惜啊可惜,幼帝登基,奸臣当道,霸陵候战败于北戎,霸陵侯世子指婚灶下婢。
你好,我现在能够用NDK的如下方式写几个简单的文件,然后打包为SO,再用另外的一个C文件调用SO,然后生成最终的供Android使用的SO文件,具体方式如下:下载一个从android模拟器里取system lib的工具busybox,然后调用命令
$adb push busybox /dev/sample/busybox
$adb shell chmod 777 /dev/sample/busybox
$adb shell /dev/sample/busybox tar -cf /dev/sample/libstar /system/lib
$adb pull /dev/sample/libstar libstar
这样就将模拟器下的 /system/lib 目录的所有库(so)文件打包并下载下来了,解压libstar就得到了我们所需要的所有库文件。
接着将所有的文件copy 到 $(NDK)\build\prebuilt\windows\arm-eabi-421\lib\gcc\arm-eabi\421,这个时候基本的配置工作就结束了。
然后建立tutorial01c调用tutorial02c中的方法,通过写makefile文件将之打包为SO
CC = /cygdrive/e/android-ndk-15_r1/build/prebuilt/windows/arm-eabi-421/bin/arm-eabi-gcc
CFLAGS = -g -O2 -fPIC -DANDROID -I / -I / -I /cygdrive/e/android-ndk-15_r1/build/platforms/android-15/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelfxsc -Wl,-soname,$@ -Wl,-shared,-Bsymbolic -lc
CRT_OBJS= -lz -lm
# source files:
SRCS= tutorial01c tutorial02c tutorial02h
all: libtutorialso
libtutorialso: tutorial01o tutorial02o
$(CC) $(SDFLAGS) -o $@ tutorial01o tutorial02o $(CRT_OBJS)
tutorial01o: tutorial02h
tutorial02o: tutorial02h
clean:
rm -f libtutorialso o
然后make,这个时候会报错 can't find "armelfxsc", 在ndk的目录里搜索一下,搜到之后copy 到$(NDK)\build\prebuilt\windows\arm-eabi-421\lib\gcc\arm-eabi\421,然后make,成功。
接着建立一个文件test01c,动态加载so文件,然后写一个makefile文件,最后make成功。
建立一个Android工程 testapp来测试其运行情况,实验表明是能够正确运行的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)