美文网首页
动态加载SO

动态加载SO

作者: Nicole被占用 | 来源:发表于2018-01-26 09:22 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/zzliaxtx.html