Android arm64-v8a 适配指南

2021-12-21  本文已影响0人  晖仔Milo

随着手机处理器的进化,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的兼容库啦。

上一篇下一篇

猜你喜欢

热点阅读