項目場景:
公司計劃開發(fā)杰發(fā)AC8025-Android 12版本車載平臺,前期預(yù)研需要構(gòu)建Android studio版的CarSystemUI工程
問題描述
AAOS車載項目里面的CarSystemUI源碼默認無Android studio版本,為了后期快速開發(fā)調(diào)試需要構(gòu)建Android studio能直接編譯出來apk的工程,構(gòu)建的過程先不表總之巨麻煩,構(gòu)建完的工程結(jié)構(gòu)如下圖: 構(gòu)建是完成了,編出來debug版的apk沒問題,但是我編release版的apk編譯不過。studio編譯報下面的故障:
Type com.android.systemui.BuildConfig is defined multiple times: D:\andy_cao\CarSystemUI\app\build\intermediates\project_dex_archive\release\out\com\android\systemui\BuildConfig.dex, D:\andy_cao\CarSystemUI\systemui\build\.transforms\a8853c444618b4986e274bb805eaaac9\transformed\release\com\android\systemui\BuildConfig.dex
這里跑個題:我為啥執(zhí)著非要編出來release版的apk? Debug 版本 Debug 是“調(diào)試”的意思,Debug 版本就是為調(diào)試而生的,編譯器在生成 Debug 版本的程序時會加入調(diào)試輔助信息,并且很少會進行優(yōu)化,程序還是“原汁原味”的。 你沒聽錯,不是任何一個程序都可以調(diào)試的,程序中必須包含額外的輔助信息才能調(diào)試,否則調(diào)試器也無從下手。
Release 版本 Release 是“發(fā)行”的意思,Release 版本就是最終交給用戶的程序,編譯器會使盡渾身解數(shù)對它進行優(yōu)化,以提高執(zhí)行效率,雖然最終的運行結(jié)果仍然是我們期望的,但底層的執(zhí)行流程可能已經(jīng)改變了。 編譯器還會盡量降低 Release 版本的體積,把沒用的數(shù)據(jù)一律剔除,包括調(diào)試信息。 最終,Release 版本是一個小巧精悍、非常純粹、為用戶而生的程序。
總結(jié) Debug 版本的存在是為了方便程序員開發(fā)和調(diào)試,性能和體積不是它的重點;Release 版本是最終交給用戶的程序,性能和體積是需要重點優(yōu)化的兩個方面。
在開發(fā)過程中,我們一般使用 Debug 版本,只有等到開發(fā)完成,確認沒有任何 Bug 之后,希望交給用戶時再生成 Release 版本。
原因分析:
授人以魚不如授人以漁
看is defined multiple times意思是BuildConfig被多次定義,但是你用is defined multiple times關(guān)鍵字去搜怎么都搜不到對應(yīng)的博客,自己又是無數(shù)次的嘗試無數(shù)次的修改始終不行。
解決方案:
后面跟一個前同事聊到此事,他給了個解決方案是在app包下面的build.gradle中曾加如下字段:
afterEvaluate {
generateReleaseBuildConfig.enabled = false
generateDebugBuildConfig.enabled = false
}
添加后就可以編譯出release版的apk,大家往上看截圖里面我選中的就是生成release版的apk
然后我用generateReleaseBuildConfig.enabled能搜到幾篇對應(yīng)解決辦法的博客我貼到下面: https://blog.csdn.net/why1happy/article/details/105765140 https://www.jianshu.com/p/21b4065e58a7
總結(jié)
吾日三省吾身,每天進步一點點
文章來源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。