先談 cpu架構(gòu)是啥
目前主流手機(jī)搭載的 基本都是64位cpu? 對(duì)應(yīng)arm64-v8a
?像老一點(diǎn)的機(jī)型 還有32位cpu的??
x86 用于平板 還有電腦模擬器中?
emmm
該怎么查看當(dāng)前設(shè)備是什么cpu呢 ......
一行命令搞定,電腦裝adb
直接在終端命令行運(yùn)行就可:??adb shell getprop ro.product.cpu.abi
回歸正題,看完上邊應(yīng)該對(duì)cpu架構(gòu)有點(diǎn)了解了
為什么我們要分cpu架構(gòu)去打包匈子?
像我們app 也算日活上億級(jí)別的了 但是一直是只配置32位so漓帚,然后呢。。。。主经。。庭惜。罩驻。。护赊。惠遏。砾跃。。應(yīng)用商店找我們說(shuō)需要適配64位機(jī)型了?
?主要原因是為了緩解應(yīng)用卡頓 耗電 導(dǎo)致手機(jī)發(fā)熱等等
ndk{
? ? abiFilters"armeabi-v7a","arm64-v8a"
}
這個(gè)大家應(yīng)該都不陌生? 安卓gradle中配置ndk? 也就是配置so文件夾 app啟動(dòng)會(huì)根據(jù)手機(jī)cpu去尋找對(duì)應(yīng)的so文件夾?
?那么大家可以想想? 原來(lái)只配置v7? 但是現(xiàn)在加個(gè)v8 apk是否會(huì)變大??
答案是肯定的? 我加完 整體打了40M
這肯定是不行的? ?領(lǐng)導(dǎo)找我 說(shuō)必須壓縮apk體積? ?
怎么辦呢 节吮?? 我突然想到 應(yīng)用商店是有32位? 64位 雙apk上傳入口? ?那我直接去打兩個(gè)包 不就行了??
說(shuō)干就干?
首先在gradle中defaultConfig節(jié)點(diǎn)配置 要打那幾個(gè)so的配置(說(shuō)的通俗一點(diǎn)? 專(zhuān)業(yè)一點(diǎn) 我也不會(huì)講)
splits{
? ? abi{
? ? ? ? enabletrue
? ? ? ? reset()
include"armeabi-v7a","arm64-v8a"
? ? ? ? universalApktrue
? ? }
}
這個(gè)就代表 打一個(gè)混合包? ?v7? v8 個(gè)打一個(gè)包(簡(jiǎn)單明了)
配置完這個(gè)? 在配置一個(gè)輸出文件名??
android.applicationVariants.all{
? ? variant->
? ? ? ? variant.outputs.all{
? ? ? ? ? ? output->
? ? ? ? ? ? ? ? //獲取ABI類(lèi)型
? ? ? ? ? ? ? ? def abiName = output.getFilter(OutputFile.ABI)
if (abiName ==null) {//混合包 ABI為空 需要命名
abiName="ALL"
? ? ? ? ? ? ? ? }
def outputFile = output.outputFile
if (outputFile !=null &&outputFile.name.endsWith('.apk')) {
def fileName ="myapp_${defaultConfig.versionName}_${envCode}${abiName}.apk"
? ? ? ? ? ? ? ? ? ? ? ? outputFileName =fileName
}
}
}
輸出文件名完全可自定義 這個(gè)只是我的習(xí)慣配置而已 僅供參考參考
配置完這些 就可以做分cpu打包了?
over抽高。。透绩。翘骂。
大家如果有技術(shù)問(wèn)題 可以加我wechat? 一起交流。 同為天涯淪落人帚豪,互幫互助碳竟。