动态加载SO

        最近由于项目中,别人需要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");    

}

你可能感兴趣的:(动态加载SO)