构建Android studio版的CarSystemUI工程时因为包名一致导致BuildConfig问题

项目场景:

公司计划开发杰发AC8025-Android 12版本车载平台,前期预研需要构建Android studio版的CarSystemUI工程


问题描述

AAOS车载项目里面的CarSystemUI源码默认无Android studio版本,为了后期快速开发调试需要构建Android studio能直接编译出来apk的工程,构建的过程先不表总之巨麻烦,构建完的工程结构如下图:

构建是完成了,编出来debug版的apk没问题,但是我编release版的apk编译不过。studio编译报下面的故障:

java 复制代码
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

这里跑个题:我为啥执着非要编出来release版的apk?

Debug 版本

Debug 是"调试"的意思,Debug 版本就是为调试而生的,编译器在生成 Debug 版本的程序时会加入调试辅助信息,并且很少会进行优化,程序还是"原汁原味"的。

你没听错,不是任何一个程序都可以调试的,程序中必须包含额外的辅助信息才能调试,否则调试器也无从下手。

Release 版本

Release 是"发行"的意思,Release 版本就是最终交给用户的程序,编译器会使尽浑身解数对它进行优化,以提高执行效率,虽然最终的运行结果仍然是我们期望的,但底层的执行流程可能已经改变了。

编译器还会尽量降低 Release 版本的体积,把没用的数据一律剔除,包括调试信息。

最终,Release 版本是一个小巧精悍、非常纯粹、为用户而生的程序。

总结

Debug 版本的存在是为了方便程序员开发和调试,性能和体积不是它的重点;Release 版本是最终交给用户的程序,性能和体积是需要重点优化的两个方面。

在开发过程中,我们一般使用 Debug 版本,只有等到开发完成,确认没有任何 Bug 之后,希望交给用户时再生成 Release 版本。


原因分析:

授人以鱼不如授人以渔

看is defined multiple times意思是BuildConfig被多次定义,但是你用is defined multiple times关键字去搜怎么都搜不到对应的博客,自己又是无数次的尝试无数次的修改始终不行。


解决方案:

后面跟一个前同事聊到此事,他给了个解决方案是在app包下面的build.gradle中曾加如下字段:

java 复制代码
afterEvaluate {
    generateReleaseBuildConfig.enabled = false
    generateDebugBuildConfig.enabled = false
}

添加后就可以编译出release版的apk,大家往上看截图里面我选中的就是生成release版的apk

然后我用generateReleaseBuildConfig.enabled能搜到几篇对应解决办法的博客我贴到下面:

https://blog.csdn.net/why1happy/article/details/105765140
https://www.jianshu.com/p/21b4065e58a7

总结

吾日三省吾身,每天进步一点点

相关推荐
小狮子安度因6 分钟前
PyQt的安装和再PyCharm中的配置
ide·pycharm·pyqt
闲暇部落39 分钟前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
VernonJsn2 小时前
visual studio 2005的MFC各种线程函数之间的调用关系
ide·mfc·visual studio
戎梓漩2 小时前
windows下安装curl,并集成到visual studio
ide·windows·visual studio
诸神黄昏EX3 小时前
Android 分区相关介绍
android
大白要努力!4 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee4 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood4 小时前
Perfetto学习大全
android·性能优化·perfetto
浩宇软件开发4 小时前
Android开发,使用TabLayout+ViewPager2实现校园健康安全宣传
android studio·android开发
热爱生活的五柒6 小时前
vscode利用ofExtensions插件可以调试单进程Openfoam,但是不能调试mpi多进程案例
ide·vscode·编辑器