1. 获取so的架构类型:
用命令来获取:file命令或者objdump命令:
1)file 命令:
% file libAbc.so
libAbc.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=de5aac080dbfec503daa20021175364b674aaeff, stripped
显然,这是一个32位,x86架构的动态链接库。?
2) objdump命令:
% objdump -a? libAbc.so
libAbc.so: file format elf32-i386
?这个so库是32位x86架构。
2 在Android中,获取so的路径,以及访问so:
1)获取so的路径:
通常,在安装完成App后,app中的如果有so库,那么,so的路径在/data/data/packagename/lib, 或者/data/app/packagename/lib相关目录下。
Android系统提供了API接口来获取so的路径,用法举例:
String libName = "libAbc.so";
String libPathName = context.getApplicationInfo().nativeLibraryDir +"/" + libName;
2)so文件的访问:
load so:
System.loadLibrary("Abc");
注意,参数中,不需要前缀“lib”。
read so:
so文件可以像普通文件一样读取,例如,可以读取so的某几个字节:
String libName = "libAbc.so";
String libPathName = context.getApplicationInfo().nativeLibraryDir +"/" + libName;
try {
FileInputStream fileStream = new FileInputStream(libPathName);
//read 32 bytes
byte[] buf = new byte[8];
int len = fileStream.read(buf);
if(len != -1){
//read success
System.out.println("len:" + len);
}
if (fileStream !=null) {
fileStream.close();
}
}catch (Exception e) {
e.printStackTrace();
}
这样,就访问到了lib库。?
|