多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Gradle for Android系列之五 多渠道打包

Gradle for Android系列之五 多渠道打包

來源:程序員人生   發布時間:2017-03-04 08:14:17 閱讀次數:3342次

  我們知道,很多的app需要發布在不同的利用商店中,但是各利用商店對上架的要求有時候又不相同,也就意味著我們需要針對不同的渠道,構建不同的渠道包,如果手動做這些事情,會比較繁瑣,那末使用Gradle會方便很多!本篇在前文的基礎上介紹1下使用gradle多渠道打包。
  今天的內容基本上都是在app目錄對應的build.gradle的android方法中設置的。主要是用到了gradle的Android插件里的productFlavors功能。
  首先,我們需要設置buildTypes

buildTypes {
        release {
            //是不是啟用混淆
            minifyEnabled true
            //混淆文件配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //混淆后的zip優化,默許為true,可以不用設置
            zipAlignEnabled true
            // 移除無用的resource文件
            shrinkResources true
            //是不是保存調試信息
            debuggable false
        }
        debug {
            //是不是啟用混淆
            minifyEnabled false
            //混淆文件配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //混淆后的zip優化,默許為true,可以不用設置
            zipAlignEnabled true
            // 移除無用的resource文件
            shrinkResources true
            //是不是保存調試信息
            debuggable true
        }
    }

  我們在正常情況下,我們發布生產包,需要簽名信息的,這時候我們可以配置1下apk的簽名信息signingConfigs,
  

 signingConfigs {
        debug {
            //也能夠是xxx.keystore具體要看你使用甚么簽名了
            storeFile file("GradleDemo.jks")
            storePassword "android"
            keyAlias "android"
            keyPassword "android"
        }

        release {
            storeFile file("GradleDemo.jks")
            storePassword "android"
            keyAlias "android"
            keyPassword "android"
        }
    }

  這些簽名信息,放在build.gradle文件中可能不安全,所以我們可以將其放在gradle.proprerties中,這樣可以所有的module的build.gradle都可以援用,現在gradle.proprerties中配置(其他的屬性如compileSdkVersion,buildToolsVersion這些也能夠,寫在該文件中,可以到達復用的目的 ):

STORE_PASSWORD="android"
KEYALIAS="android"
KEYPASSWORD="android"
STORE_PATH="GradleDemo.jks"

  接著我們在build.gradle文件中我們可以像以下1樣援用:

signingConfigs {
        release {
            storeFile file(STORE_PATH)
            storePassword STORE_PASSWORD
            keyAlias KEYALIAS
            keyPassword KEYPASSWORD
        }
        release {
            storeFile file(STORE_PATH)
            storePassword STORE_PASSWORD
            keyAlias KEYALIAS
            keyPassword KEYPASSWORD
        }
    }

  配置完簽名信息后,我們可以在buildTypes中添加簽名屬性signingConfig signingConfigs.release:
  

buildTypes {
        release {
            //是不是啟用混淆
            minifyEnabled true
            //混淆文件配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //混淆后的zip優化,默許為true,可以不用設置
            zipAlignEnabled true
            // 移除無用的resource文件
            shrinkResources true
            //是不是保存調試信息
            debuggable false
            signingConfig signingConfigs.release
        }
        debug {
            //是不是啟用混淆
            minifyEnabled false
            //混淆文件配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //混淆后的zip優化,默許為true,可以不用設置
            zipAlignEnabled true
            // 移除無用的resource文件
            shrinkResources true
            //是不是保存調試信息
            debuggable true
            signingConfig signingConfigs.debug
        }
    }

  配置好這些基本的信息后,就需要設置本篇的重點productFlavors,這里用豌豆莢和利用寶做演示:
  

productFlavors {
        wandoujia {}
        yingyongbao {}
    }

  就這樣設置好每一個渠道對應的name,固然可以隨著不同渠道的要求,設置相應的屬性,例如設置不同的applicationId,不同的啟動頁面等。接著在AndroidManifest.xml文件的application的標簽下設置meta-data:
  

<meta-data android:name="CHANNEL" android:value="${CHANNEL_VALUE}"/>

  通過Gradle Android插件里的另外一個功能manifestPlaceholders來自動的替換CHANNEL_VALUE,我們還需要在build.gradle文件中添加:
  

productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    }

  到這里我們已配置好了各渠道的信息。但是我們通常還需要根據不同的渠道和版本信息來命名apk的名稱,以方便我們進行發版:
  

//app-v1.0-wandoujia-debug.apk
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                // 輸出apk名稱為wooyun_v1.0_wandoujia.apk
                def fileName = "app-v${variant.versionName}-${variant.productFlavors[0].name}-${variant.buildType.name}.apk".toLowerCase()
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }

    }

  在app的build目錄下生成類似于app-v1.0-wandoujia-debug.apk這類命名方式的apk。到此基本上就可以滿足1般的需求了。
  如果我們在利用啟動時候,需要用到渠道的信息,可以這樣獲得:
  

public static String getChannelName(Context ctx) {  
        if (ctx == null) {  
            return null;  
        }  
        String channelName = null;  
        try {  
            PackageManager packageManager = ctx.getPackageManager();  
            if (packageManager != null) {  
                //注意此處為ApplicationInfo 而不是 ActivityInfo,由于我們設置的meta-data是在application標簽中,而不是某activity標簽中,所以用ApplicationInfo  
                ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);  
                if (applicationInfo != null) {  
                    if (applicationInfo.metaData != null) {  
                        channelName = applicationInfo.metaData.getString("");  
                    }  
                }  

            }  
        } catch (PackageManager.NameNotFoundException e) {  
            e.printStackTrace();  
        }  
        return channelName;  
    }

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产亚洲欧美ai在线看片 | 99热这里有精品 | 亚洲福利 | 欧美a在线| 欧美日韩不卡视频一区二区三区 | 国产三区视频李宗瑞 | h免费在线 | 国产亚洲精品福利在线 | 久久国产欧美日韩精品免费 | 一级毛片一级毛片a毛片欧美 | 91国内| 一级女人18片毛片免费视频 | 亚洲第一免费网站 | yellow中文字幕视频在线 | yy毛片| 亚洲精品中文字幕一区在线 | 伊人插 | 91福利在线免费观看 | 综合久久久久久久 | 男女自偷自拍视频免费观看篇 | 自拍视频国产 | 日韩欧美精品综合久久 | 欧美一区二区在线观看 | 欧美日韩亚洲天堂 | 免费区一级欧美毛片 | 日本免费第一区二区三区 | 亚洲视频www | jizz中国18| 亚洲一区区 | 亚洲免费精品视频 | 黄色片xxxxx| 成人老司机深夜福利久久 | 最近中文字幕2019高清免费 | 国产精品欧美视频另类专区 | 国产爽爽视频 | 亚洲网址 | 亚洲成年人在线观看 | 密桃av| 亚洲不卡一区二区三区 | 第一页在线 | 最近更新中文字幕在线 |