随着手机处理器的进化,armeabi-v7a不再满足我们的日常使用,目前大部分应用市场都对arm64-v8a适配做出了硬性的适配要求,如果不做,App则无法上架。
这里,分享一下我的适配方法,希望可以给你带来帮助。
step1 开启 arm64-v8a
image.pngstep2 - 正常打包 (debug、release皆可)
image.pngstep3 - 复制 app.apk 的绝对路径
image.pngstep4 - 调用指令,查看.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("/"));
}
}
网友评论