原因

最近在接触安卓开发,有搭档要求将咱们编译的aar包巨细下降。依据之前运用webpack编译的经历,能够选用相似DefinePlugin的办法结束条件编译。

什么是条件编译

最早接触条件编源码编辑器编程猫下载译其实是C++的宏。它是预处理指令,在程序编译前做一些源码替换作业。其中的#ifdef或许#if指令能够结束条件编译的作用。简略地举下application面的比如。

#include<iostream&gios14桌面布局图片t;
using namespace std;
#define NAME "Programmer "
#define ANDROID 1
int main() {
#if ANDROID
cout <<"Hello " << NAME << "It's android" << endl;
#else
cout << "Hello " <<appstore NAME源码资本 << "It's not android" << endl;
#endif
return 0;
}

关于上面的代码,It’s android这一行代码将归入编译。假设#define ANDROID 0,那么It’s not android将归入编译ios14.4值得晋级吗源码运用宏咱们能够在编译脚本预先指定程序里边的某些变量值,运用条件宏能够引入不同的代码结束,究竟结束按需appear编译代码,而不是一切的途径代码一起编译,抵达减小究竟输出的巨细。

Gradle的宏

相似C++,Gradle也支撑自界说常量。参照文档Sharios下载e cuios14怎么设置桌面小组件stom fields and resource values wwebpack阮一峰ith your app’s code,在Gradle中增加如下界说,

android {
...
buildTypes {
rele源码之家ase {
buildConfigField("String", "BUILD_TYPE", ""release"")
...
}
deb源码网站ug {
buildCoWebpacknfigField("String", "BUILD_TYPE", ""debug""android/yunos)
}
}
}
...

能够在代码中直接运用BuildConfig.BUILD_TYPE来访appleid问这个预界说变量,并做一些条件操控。一起也能够运用gradle变量设置,比如

buildConfigField("String", "BUILD_TYPE", ""$buildtype"")

具体生成的Build.Config将位于下面的方位
android条件编译

条件引入编译文件

除了界说BuildConfig来操控业务逻辑外,也需求依据条件引入文件或许打扫文件。能够运用定webpack中文网义好的gradle变量在sourceSets中打扫,比如

    sourceSets{
main {
res {
sappreciatercDir "src/main/res"
if (buildtype == "product1")ios14.4值得晋级吗 {
print "exclude resources"
exclude("src/main/res/values-night/**")
}
}
}
}

指令行参数操控编译变量

有了BuildConfiios12g,那么在运行时传入参数就能够抵达。传递参数的办法就是-P,比如

gradlew -Pbuildtype=debug assembleDebug

就可源码年代以在gradle文件里边访问buildtype这源码超市个变量。

总结

结束条件化编译首要需求

1)预界说BuildCoios12nfig变量来操控代码逻辑

2)运用gradle变量操控sourceSets

3) 经过-P传递参数,编译不同的结束。