Android Studio BuildType 构建类型

本文详细介绍了BuildType的属性和方法,包括应用标识后缀、调试模式等,并通过实例展示了如何配置不同构建类型的APK,以及源集加载优先级和资源覆盖机制。

一、BuildType 属性以及方法。

下面简要介绍下BuildType的属性以及方法,更多详情,可以参阅:
BuildType详情

1、属性

属性描述
applicationIdSuffix应用程序标识后缀。
consumerProguardFilesProGuard规则文件要包含在已发布的AAR中。
debuggable这个构建类型是否应该生成可调试的apk。
embedMicroApp是否应使用此构建类型将链接的Android Wear应用程序嵌入到变体中。
javaCompileOptions配置Java编译选项。
jniDebuggable此构建类型是否配置为生成具有可调试本机代码的APK。
manifestPlaceholders明示占位符
minifyEnabled是否为此构建类型启用了Minify。
multiDexEnabled是否为此变体启用了Multi-Dex。
multiDexKeepFile指定将被编译到主dex文件中的其他类的文本文件。
multiDexKeepProguard具有附加ProGuard规则的文本文件用于确定哪些类被编译到主dex文件中。
name此构建类型的名称。
proguardFiles返回要使用的ProGuard配置文件。
pseudoLocalesEnabled是否在APK中生成伪语言环境。
renderscriptDebuggable构建类型是否配置为生成具有可调试RenderScript代码的apk。
renderscriptOptimLevel由renderscript编译器使用的优化级别。
shrinkResources是否启用未使用资源的收缩。默认值为false
signingConfig签名配置。
testCoverageEnabled是否为此构建类型启用了测试覆盖率。
useJack 弃用是否应该使用实验杰克工具链。
versionNameSuffix版本名称后缀。
zipAlignEnabledzipalign是否启用此构建类型。

2、方法

方法描述
buildConfigField(type, name, value)向生成的BuildConfig类添加一个新字段。
consumerProguardFile(proguardFile)添加要包含在已发布的AAR中的proguard规则文件。
consumerProguardFiles(proguardFiles)添加要包含在已发布的AAR中的proguard规则文件。
externalNativeBuild(action)配置本机构建选项。
initWith(that)从给定的构建类型复制所有属性。
proguardFile(proguardFile)添加一个新的ProGuard配置文件。
proguardFiles(files)添加新的ProGuard配置文件。
resValue(type, name, value)添加新生成的资源。
resValue(type, name, value)添加新生成的资源。
setProguardFiles(proguardFileIterable)设置ProGuard配置文件。

二、构建类型(Building type)的应用

  • 1、可以在模块级 build.gradle 文件的 android {} 代码块内部创建和配置构建类型。
  • 2、当创建新模块时,Android Studio 会自动为您创建debug和release这两种构建类型。

下面我们通过一个案例,来熟悉BuildType以及源集的配置,并验证以下事项:
- 1、每一个构建类型(BuildingType),都会产生对应的一个APK。
- 2、源集的加载优先级。

备注:想要看到运行效果或者想要动手配置的同学,请移驾Github

下面的案例,使用了一个类库DemosAndApi,该类库用于快速构建Demos演示或者Api程序。

1、创建或者配置构建类型(Building type):

applicationIdSuffix:应用程序标识后缀。
versionNameSuffix:版本名称后缀。
initWith:允许您从其他构建类型复制其配置。

android {
    ...
    defaultConfig {...}
    buildTypes {
        release {// 备注:"release"类型的构建类型
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {// 备注:"debug"类型的构建类型
            applicationIdSuffix ".debug"
        }

        jnidebug {

            // 复制 构建类型=“debug”的配置
            initWith debug
            applicationIdSuffix ".jnidebug"
            jniDebuggable true
        }
    }
}

2、添加源集目录。

上面的配置,为模块新增加了jnidebug源集,那么,我们可以在工程中,为其配置源集目录。
关于源集,可以参考这篇文章。Android Studio Set of source 代码源集

工程文件树,展示如下:

3、配置源集文件。

在每个源集中,我们都只有一个MainActivity,该类展示在界面上展示当前所处于的源集或者所对应的构建类型。详情请参阅源码

4、执行编译

  • 4.1、选择AndroidStudio左下角的Build Variants来配置需要编译的类型。

  • 4.2、每一种构建类型都编译完毕后,我们查阅:app/build/outputs目录可以看到,相应的apk已经生成了。

5、Overlay覆盖机制。

我们先通过比较debug、release、jnidebug三种构建类型的运行结果:

  • 5.1、debug 源集的apk运行效果:
    类库DemosAndApi为我们加载了debug和main源集的页面,并且页面来自各自源集的配置。

  • 5.2、release运行结果
    Github源码库中有release构建类型的运行结果,在此就不在贴出来了。

  • 5.3、jnidebug的运行结果
    jnidebug是我们新建的构建类型,它的运行结果如下:

在此处,我们看到jnidebug的运行效果不一样了,这是因为,我们在jnidebug的源集中,重新定义了main源集的资源。

<resources>
······
    <string name="app_name_jnidebug_label">app/jnidebug/jnidebug_MainActivity</string>
    <string name="app_name_main_label">app/main/main_MainActivity_来自jnidebug源集的覆盖</string>
</resources>

在这里延伸出来一个概念,资源的overlay,在BuildType中,资源存在覆盖机制,存在优先级。

构建变体 > 构建类型[BuildType] > 产品风味[ProductFlavor] > 主源集[main] > 库依赖项

从上面的优先级来看,main源集的优先级 是比较低的,也就是说,【新创建的源集】可以覆盖【main源集】的资源。


写作不易,耗费心力,如果上面的内容对你有帮助,请随意打赏,让我们坚持下去~

<think>好的,用户想解决Android Studio构建速度慢的问题。我需要先回想一下常见的优化方法。首先,构建速度慢通常和Gradle配置、硬件资源、项目设置有关。我应该分步骤来思考可能的解决方案。 第一步,可能建议用户调整Gradle配置,比如启用并行构建和按需配置。记得Gradle的这两个选项可以在gradle.properties文件中设置。这能加快构建过程,尤其是多模块项目。需要提醒用户检查这些配置是否存在,如果没有就添加。 然后,启用构建缓存也是一个有效的方法。构建缓存可以让Gradle重复利用之前的构建结果,减少重复工作。同样是在gradle.properties里配置,用户可能需要开启这个功能。 接下来,考虑依赖项的管理。过多的依赖或未使用的库会增加构建时间。建议用户定期清理不必要的依赖,并使用较新版本的库,因为新版本可能有性能优化。另外,使用本地Maven仓库可能比远程仓库更快,特别是网络状况不好的时候。 增量编译和离线模式也是关键点。Android Studio的增量编译只重新编译改动部分,而开启离线模式可以避免每次构建都检查远程仓库更新。但需要注意离线模式可能导致依赖更新不及时,所以必要时需关闭。 模块化项目结构方面,如果项目有多个模块,可以启用配置按需加载,避免配置不必要的模块。此外,将项目拆分成更多模块,利用并行构建的优势,也能提升速度。 硬件资源方面,增加内存分配很重要。用户可以通过修改studio.vmoptions文件来调整Android Studio和Gradle的堆大小。比如,把Xmx调整到更高的值,如4096MB或更大,但不要超过系统可用内存。 使用最新工具版本也是一个建议。Android Studio和Gradle的更新通常包含性能改进,确保用户使用的是最新稳定版。同时,JDK版本也可能影响构建速度,推荐使用官方推荐的版本。 最后,一些日常维护操作,比如定期清理缓存和临时文件,避免杀毒软件干扰构建进程,关闭不必要的后台程序,这些都能帮助提升性能。 现在需要把这些步骤整理成用户容易理解的建议,按照优先级排序,并引用相关的参考资料。虽然用户提供的引用主要是关于乱码问题,但构建速度的优化可能需要引用其他常见解决方案,但根据用户提供的引用,可能没有直接相关的,所以可能需要避免引用不相关的资料,或者适当关联。比如,用户引用中提到修改VM options文件,这和调整内存分配有关,可以联系起来。 检查是否有遗漏的点,比如使用Instant Run已经被新功能替代,现在应该用Apply Changes。另外,配置构建变体,比如只构建需要的版本(debug而不是release),也能节省时间。还有,避免在构建过程中运行Lint等检查,可以在需要时手动执行。 总结下来,需要分步骤列出优化方法,并确保每个建议都清晰可行,帮助用户逐步优化构建速度。</think>以下方法可有效提升Android Studio构建速度,按优化效果优先级排序: 1. **调整Gradle配置** - 在项目根目录的`gradle.properties`文件中添加: ``` org.gradle.parallel=true # 启用并行构建 org.gradle.configureondemand=true # 启用按需配置 org.gradle.caching=true # 启用构建缓存 android.enableBuildCache=true ``` 这能加速多模块项目的构建过程[^1][^3] 2. **优化依赖管理** - 清理未使用的依赖项(检查`build.gradle`文件) - 使用固定版本号代替动态版本(如`1.0.0`而非`1.+`) - 对频繁更新的库启用离线模式:`File > Settings > Build > Gradle > Offline work` 3. **内存配置优化** - 修改`studio.vmoptions`文件(Help > Edit Custom VM Options): ``` -Xms1024m -Xmx4096m ``` - 在`gradle.properties`中增加Gradle内存: ``` org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m ``` 4. **启用增量编译** - 在`gradle.properties`添加: ``` kotlin.incremental=true android.enableSeparateAnnotationProcessing=true ``` 5. **模块化构建优化** - 将大型模块拆分为子模块 - 对不常修改的模块设置`android.library.distributionType=fake` 6. **硬件加速配置** - 启用Gradle守护进程(默认已开启) - 在`gradle.properties`中设置: ``` android.useAndroidX=true android.enableJetifier=true ``` 7. **版本更新建议** - 保持Android Studio和Gradle插件为最新稳定版 - 使用JDK 17+(在`File > Project Structure`中设置) **验证优化效果:** 执行构建后,在Build窗口查看耗时分析: ``` ./gradlew assembleDebug --profile ``` 生成的报告路径:`项目根目录/build/reports/profile/` **其他技巧:** - 定期执行`File > Invalidate Caches`清除缓存[^5] - 关闭即时分析工具:`File > Settings > Editor > Inspections` - 避免同时开启多个Gradle项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值