zoukankan      html  css  js  c++  java
  • 《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)了

  • 相关阅读:
    BSGS
    斯特林数 笔记
    「CF932E」Team Work
    「hihoCoder1869」Items
    「Luogu1345」[USACO5.4]奶牛的电信Telecowmunication
    「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess
    「Luogu2522」[HAOI2011]Problem b
    狄利克雷卷积学习笔记
    莫比乌斯函数学习笔记
    欧拉函数学习笔记
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8626365.html
Copyright © 2011-2022 走看看