場景:
項目只支持armeabi-v7,引入一個第三方aar,該aar只支持armeabi。
問題:這時候面臨的兩個取捨問題
1,爲了兼容性更好同時導入armeabi-v7和armeabi的so包,但包體積會增大好多。
2,爲了控制包體積的大小,只放armeabi-v7的包,但是無法兼容老機型。
解決辦法:
1、方法一:放armeabi-v7的so就可以了,少數老設備才需要armeabi。如果想萬無一失,兼容老設備,那就只能犧牲包體積,兩個都放。
2、方法二:把so放到雲端,按需加載到data/data/包下,讀取CPU架構和當前設備的第一指令集,
String[] abis = new String[]{};
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP)
{
abis = Build.SUPPORTED_ABIS;
} else {
abis = new String[]{Build.CPU_ABI,Build.CPU_ABI2};
}
StringBuilder abiStr = new StringBuilder();
for(String abi:abis)
{
abiStr.append(abi);
abiStr.append(',');
}