多渠道打包

# android多渠道打包 #

## 1.如何查看apk的簽名信息??##

1將apk解壓;

2.找到META-INF 下的.RSA文件;

3.進(jìn)入cmd環(huán)境,進(jìn)入.RSA文件文件所在路徑,命令:keytool -printcert -file XXX.RSA即可查看簽名信息。

查看Android開發(fā)的數(shù)字簽名信息:

1.cmd環(huán)境下進(jìn)入C:\Users\用戶名\.android目錄下;

2.keytool -list -v -keystore debug.keystore;

![](https://github.com/zxp0505/ManagerSummary/blob/master/image/1.png)

debug.keystore

![](https://github.com/zxp0505/ManagerSummary/blob/master/image/2.png)

![](image/2.png)

## 友盟的打包方案(常見) ##:

http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/

友盟統(tǒng)計(jì)多渠道為例:

1.在AndroidManifest.xml中配置placeholder

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}" />

2.在build.gradle中設(shè)置productFlavors

android {

productFlavors {

xiaomi {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]

}

_360 {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]

}

baidu {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]

}

wandoujia {

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]

}

}

}

或者批量修改

android {

productFlavors {

xiaomi {}

_360 {}

baidu {}

wandoujia {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

}

直接執(zhí)行 gradle assembleRelease 慢慢等待打包完成

完整gradle 腳本

apply plugin: 'com.android.application'

def releaseTime() {

return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))

}

android {

compileSdkVersion 21

buildToolsVersion '21.1.2'

defaultConfig {

applicationId "com.boohee.*"

minSdkVersion 14

targetSdkVersion 21

versionCode 1

versionName "1.0"

// dex突破65535的限制

multiDexEnabled true

// 默認(rèn)是umeng的渠道

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]

}

lintOptions {

abortOnError false

}

signingConfigs {

debug {

// No debug config

}

release {

storeFile file("../yourapp.keystore")

storePassword "your password"

keyAlias "your alias"

keyPassword "your password"

}

}

buildTypes {

debug {

// 顯示Log

buildConfigField "boolean", "LOG_DEBUG", "true"

versionNameSuffix "-debug"

minifyEnabled false

zipAlignEnabled false

shrinkResources false

signingConfig signingConfigs.debug

}

release {

// 不顯示Log

buildConfigField "boolean", "LOG_DEBUG", "false"

minifyEnabled true

zipAlignEnabled true

// 移除無用的resource文件

shrinkResources true

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

signingConfig signingConfigs.release

applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

if (outputFile != null && outputFile.name.endsWith('.apk')) {

// 輸出apk名稱為boohee_v1.0_2015-01-15_wandoujia.apk

def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

output.outputFile = new File(outputFile.parent, fileName)

}

}

}

}

}

// 友盟多渠道打包

productFlavors {

wandoujia {}

_360 {}

baidu {}

xiaomi {}

tencent {}

taobao {}

...

}

productFlavors.all { flavor ->

flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:support-v4:21.0.3'

compile 'com.jakewharton:butterknife:6.0.0'

...

}

## 美團(tuán)快速腳本打包方案: ##

美團(tuán)前期打包方案 :

https://tech.meituan.com/mt-apk-packaging.html

原理:是在

MET-INF文件夾中添加個(gè)空文件 不需要重新編譯??命名上得以支持??應(yīng)用啟動(dòng)的時(shí)候來讀取名字 區(qū)分渠道

后期由于sdk會(huì)就行簽名校驗(yàn) APK Signature Scheme v2

https://tech.meituan.com/android-apk-v2-signature-scheme.html

原理:是找個(gè)不受保護(hù)的 apksingblock這個(gè)區(qū)域 添加 id_value操作???寫入渠道信息??然后進(jìn)行讀取

項(xiàng)目地址:https://github.com/Meituan-Dianping/walle

## 兩種打包的使用場(chǎng)景 : ##

對(duì)于第一種:友盟打包 主要用于小公司 由于友盟有統(tǒng)計(jì)平臺(tái) 可以直觀的看到各個(gè)渠道的情況 缺點(diǎn)是:每次打包的時(shí)候 對(duì)于每個(gè)渠道都得重新編譯 時(shí)間消耗長(zhǎng)

對(duì)于第二種 :打包時(shí)間短??只需要編譯一個(gè)包 通過復(fù)制修改內(nèi)部信息 來做到各個(gè)渠道的區(qū)別 應(yīng)用每次啟動(dòng) 來讀取文件信息 請(qǐng)求接口 的時(shí)候帶來區(qū)分多渠道??缺點(diǎn)是: 需要后臺(tái)自己去做統(tǒng)計(jì) 成本較高

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • build.gradle配置參數(shù)詳解 //聲明是Android程序 apply plugin: 'com.andr...
    風(fēng)箏李閱讀 230評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,814評(píng)論 25 708
  • # 一度蜜v3.0協(xié)議 --- # 交互協(xié)議 [TOC] ## 協(xié)議說明 ### 請(qǐng)求參數(shù) 下表列出了v3.0版協(xié)...
    c5e350bc5b40閱讀 662評(píng)論 0 0
  • 小陳剛過完三周歲生日,給小兒唱完“生日快樂……”小陳心里幸福的感覺都溢出來了,高興得手舞足蹈,嘴巴捂著小手竊笑,看...
    張瑞秋5114閱讀 473評(píng)論 0 0
  • “當(dāng)時(shí)的他是最好的他,后來的我是最好的我??墒亲詈玫奈覀冎g,隔了一整個(gè)青春。怎么奔跑也跨不過的青春,只好伸出手道...
    十點(diǎn)三十八閱讀 271評(píng)論 0 0