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

项目场景:

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


问题描述

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

这里跑个题:我为啥执着非要编出来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中曾加如下字段:

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

总结

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

相关推荐

  1. 一个导致内存泄漏问题

    2024-07-09 18:48:03       26 阅读
  2. adb 查找启动以及导出安装

    2024-07-09 18:48:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 18:48:03       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 18:48:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 18:48:03       43 阅读
  4. Python语言-面向对象

    2024-07-09 18:48:03       54 阅读

热门阅读

  1. Apache AGE vs Neo4j

    2024-07-09 18:48:03       26 阅读
  2. 数据库基础

    2024-07-09 18:48:03       23 阅读
  3. centos7系统如何使用GPT分区

    2024-07-09 18:48:03       28 阅读
  4. GeoServer改造Springboot源码十一(样式管理代码)

    2024-07-09 18:48:03       21 阅读
  5. 高阶面试-写缓存

    2024-07-09 18:48:03       23 阅读
  6. 深度分析 Apache Hudi:大数据实时处理的利器

    2024-07-09 18:48:03       26 阅读
  7. el-row和el-col

    2024-07-09 18:48:03       23 阅读