最近由于项目中,别人需要64位的so库(一般armeabi-v7足够用了),同款手机只能运行同一种的so,so文件向前兼容。Android Studio工程放在jniLibs/xxx (xxx一般为armeabi等)目录中(当然也可以通过在build.gradle文件中的设置jniLibs.srcDir属性自己指定。客户要求想把需要集成的功能的so以插件的形式下载,达到减少初始包体的效果,说白了就是让你动态去加载so。
动态加载so,不可能一次性加载所有类型的so文件,所有需要判断系统的位数。
/**
* Check if system libc.so is 32 bit or 64 bit
*/
public static boolean isLibc64(Context context) {
String nativeLibraryDir = context.getApplicationContext().getApplicationInfo().nativeLibraryDir;
String[] split = nativeLibraryDir.split("/");
int i = split.length -1;
if(split[i].contains("64")){
return true;
}else{
return false;
}
}
判断后就可以去下载了,下载完对应的so,进入你想要展示的界面的时候,比如activity中,初始化的时候,加载so:
if (type ==64) {
String s = getFilesDir().getAbsoluteFile() +"/64soLib";
System.load(s +"/xxxxx.so");
}else if (type ==32) {
String s = getFilesDir().getAbsoluteFile() +"/32soLib";
System.load(s +"/xxxxxx.so");
}