美文网首页
Android arm64-v8a 适配指南

Android arm64-v8a 适配指南

作者: 晖仔Milo | 来源:发表于2021-12-21 14:59 被阅读0次

    随着手机处理器的进化,armeabi-v7a不再满足我们的日常使用,目前大部分应用市场都对arm64-v8a适配做出了硬性的适配要求,如果不做,App则无法上架。

    这里,分享一下我的适配方法,希望可以给你带来帮助。

    step1 开启 arm64-v8a

    image.png

    step2 - 正常打包 (debug、release皆可)

    image.png

    step3 - 复制 app.apk 的绝对路径

    image.png

    step4 - 调用指令,查看.apk文件涉及到的 .so 文件 (记得替换.apk地址)

    zipinfo -1 YOUR_APK_FILE.apk | grep \.so$
    

    step5 - 复制我写的Java工具类 SOHelper.java

    import java.util.ArrayList;
    import java.util.List;
    
    public class SoHelper {
        //查看so 文件列表指令 : zipinfo -1 YOUR_APK_FILE.apk | grep \.so$
        String arrays[] = {
                //复制你的so列表到这里
                "lib/armeabi-v7a/libswscale-neon.so",
                "lib/armeabi-v7a/libne_audio.so",
        };
    
        public static void main(String[] args){
            SoHelper soHelper = new SoHelper();
            soHelper.printNotFoundV8aSo();
        }
    
        public List<String> getV7aSo() {
            List<String> list = new ArrayList<>();
            for (String item : arrays) {
                if (item.startsWith("lib/armeabi-v7a/")) {
                    list.add(item);
                }
            }
            return list;
        }
    
        public List<String> getV8aSo() {
            List<String> list = new ArrayList<>();
            for (String item : arrays) {
                if (item.startsWith("lib/arm64-v8a/")) {
                    list.add(item);
                }
            }
            return list;
        }
    
        public void printNotFoundV8aSo() {
            List<String> v7List = getV7aSo();
            List<String> v8List = getV8aSo();
    
            List<String> notfoundList = new ArrayList<>();
            for (String s : v7List) {
                boolean notFound = true;
                for (String s1 : v8List) {
                    if (getSoName(s).equals(getSoName(s1))) {
                        notFound = false;
                        break;
                    }
                }
    
                if (notFound && !s.endsWith("neon.so")) {
                    notfoundList.add(s);
                }
            }
    
            System.out.println(String.format("arm64-v8a未找到的so,共%s个", notfoundList.size()));
            for (String item : notfoundList) {
                System.out.println(item);
            }
        }
    
        public String getSoName(String s) {
            return s.substring(s.lastIndexOf("/"));
        }
    
    }
    

    step6 - 运行,然后就可以看到差异啦,剩下的就是慢慢去找第三方arm64-v8a的兼容库啦。

    相关文章

      网友评论

          本文标题:Android arm64-v8a 适配指南

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