《Gradle权威指南》--Android Gradle多渠道构建

Posted 嘉禾世兴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Gradle权威指南》--Android Gradle多渠道构建相关的知识,希望对你有一定的参考价值。

No1:

Build Variant = Build Type + Product Flavor

Build Variant:构建的产物

Build Type:构建的类型

Product Flavor:构建的渠道

android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    productFlavors{
        google{}
        baidu{}
    }
}

No2:

Flurry多渠道和友盟多渠道构建

Flurry本身没有渠道的概念,它有Application,所以可以把一个Application当成一个渠道,每个Application都有一个Key,称为Flurry Key;友盟本身有渠道的概念,只要我们在AndroidManifest.xml配置标注即可。

android{
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    
    defaultConfig{
        applicationId "org.flysnow.app.example112"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName 1.0.0
        resConfig zh
    }
    buildTypes{
        release{
            minifyEnabled true
            projuardFiles getDefaultProguardFile(proguard-android.txt),proguard-rules.pro
            zipAlignEnabled true
        }
    }
    productFlavors{
        google{
            buildConfigField String,FLURRY_KEY,"BHJKOUASDASFKLZL"
        }
        baidu{
            buildConfigField String,FLURRY_KEY,"HJSDKHFJDSF23478"
        }
    }
}

这样每个渠道的BuildConfig类中都会有名字为FLURRY_KEY常量定义

友盟渠道是在AndroidManifest.xml中配置的

<meta-data android :value="Channel ID" android:name="UMENG_CHANNEL"/>

其中Channel ID就是渠道值

No3:

多渠道构建定制--其实就是对Android Gradle插件的ProductFlavor的配置,通过配置ProductFlavor达到灵活地控制每个渠道的目的

applicationId就是该渠道的包名

android{
    ...
    productFlavors{
        google{
            applicationId "org.flysnow.app.example112.google"
        }
    }
}

consumerProguardFiles--只对Android库项目有用

android{
    productFlavors{
        google{
            consumerProguardFiles proguard-rules.pro,proguard-android.txt
        }
    }
}

testApplicationId--测试包名

android{
    ...
    productFlavors{
        google{
            testApplicationId "org.flysnow.app.example112.test"
        }
    }
}

testFunctionalTest--是否为功能测试,testHandleProfiling--是否启用分析功能

android{
    productFlavors{
        google{
            testFunctionalTest true
            testHandleProfiling true
        }
    }
}

testInstrumentationRunner--用来配置运行测试使用的Instrumentation Runner的类名

android{
    productFlavors{
        google{
            testInstrumentationRunner android.test.InstrumentationTestRunner
        }
    }
}

testInstrumentationRunnerArguments--用来配置Instrumentation Runner使用的参数

android{
    productFlavors{
        google{
            testInstrumentationRunnerArguments.put("coverage",true)
        }
    }
}

useJack--用于标记是否启用Jack和Jill这个全新的、高性能的编译器

android{
    productFlavors{
        google{
            useJact true
        }
    }
}

dimension --多维度,理解为对ProdcutFlavor进行分组。用flavorDimensions声明维度,才能在ProductFlavor中使用

android{
    flavorDimensions "abi","version"//优先级:abi>version>defaultConfig
    productFlavors{
        free{
            dimension version
        }
        paid{
            dimension version
        }
        x86{
            dimension abi
        }
        arm{
            dimension abi
        }
    }
}

会生成

ArmFreeDebug

ArmFreeRelease

ArmPaidDebug

ArmPaidRelease

x86FreeDebug

x86FreeRelease

x86PaidDebug

x86PaidRelease

No4:

提高多渠道构建的效率-美团方案

1)利用Android Gradle打一个基本包

2)基于该包复制一个,文件名要能区分出产品、打包时间、版本、渠道等

3)对复制出来的apk文件进行修改,在其META-INF目录下新增空文件,但是空文件的文件名要有意义,必须包含能区分渠道的名字,如:mtchannel_google

4)重复步骤2)步骤3生成我们所需的所有渠道包apk,这个可以使用Python这类脚本来做

5)生成了我们所有发布渠道的apk包

使用:

在apk启动(Application onCreate)时候,读取我们写apk中META-INF目录下的前缀mtchannel_文件,如果找到的话,把文件名取出来,然后就可以得到渠道标识(Google)了

以上是关于《Gradle权威指南》--Android Gradle多渠道构建的主要内容,如果未能解决你的问题,请参考以下文章

《Gradle权威指南》--Android Gradle高级自定义

读书笔记--Android Gradle 权威指南(上)

《Gradle权威指南》--Gradle任务

自定义 Android Gradle -- 启动 zipalign 优化

Android开发权威指南的图书目录

Android编程权威指南的目录