Android---Android Studio开发技巧:(命令行打包)

一、用Gradle命令行进行打包
1.配置Gradle渠道包
// 渠道包
productFlavors {
    default_channel {}
    wandoujia {}
    _360 {}
    yingyongbao {}
    xiaomi {}
    baidu {}
    huawei {}
    jifeng {}
}
productFlavors .all { flavor ->
    flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE : name ]
}
2.配置Gradle环境变量
   打开bash.profile
   设置gradle的目录
    
    保存退出bash文件。
3.签名设置
    build.gradle文件
// 签名设置
signingConfigs {
    release {
        //签名文件路径,绝对路径
        storeFile file( '/Users/Bill/CODE/OLDSVN/PhysicianAssistant/assistant_key.jks' )
        storePassword '123456' //密码
        keyAlias 'assistant'
        keyPassword '123456'  //密码
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
        // 混淆
        minifyEnabled true
        proguardFiles getDefaultProguardFile( 'proguard-android.txt' ), ' proguard-rules.pro '
        // 不显示Log
        buildConfigField "boolean" , "LOG_DEBUG" , "false"
        //Zipalign优化
        zipAlignEnabled true
        // 移除无用的resource文件
        shrinkResources true
        //打包是替换指定manifest文件中节点的数据
        manifestPlaceholders = [ UMENG_APPKEY_VALUE : '5795f876e0f55a612f000c45' ]
    }
    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile( 'proguard-android.txt' ), ' proguard-rules.pro '
        buildConfigField "boolean" , "LOG_DEBUG" , "true"
        zipAlignEnabled true
        shrinkResources false
        //打包是替换指定manifest文件中节点的数据
        manifestPlaceholders = [ UMENG_APPKEY_VALUE : '571d8695e0f55a2bc0000776' ]
    }
}
4.命令行应用
   进入项目所在根目录;
    
  执行命令: gradle  assembleRelease  生成release版本     或者: ./gradlew assembleRelease
                    gradle assembleDebug    生成debug版本      
 如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
gradlew assembleWandoujiaRelease
 如果我们想打包wandoujia渠道的debug版本,执行如下命令就好了:
    gradlew assembleWandoujiaDebug
    
 如果我们只打wandoujia渠道版本,则:
    gradlew assembleWandoujia
     
    
   最终生成的文件在项目根目录,build—outputs—apk目录下;
自定义打包名称:
**************************************** 分 割 线 *********************************************************
    Android Studio 一键多渠道打包实现方法,如果你还在手动的对每个市场进行打包,先不说 Low 不 Low,自己也会觉得很痛苦对吧,甚至有的同学使用 Windows build 打包一次就得 3-5min;打 6 个市场包半个小时就过去了,最重要的是这个过程中还有可能出现错误,增加测试的难度与成本。
多渠道打包也有很多种方式;有远程的 jenkins + gradle +github 等方法;网上资料很多,由于这种方式需要的配置环境比较繁琐;适用于需要大量打包的企业,并且需要远程打包的需求;本文将介绍 Android Studio 本地一键打包与自动配置签名的方法;
废话说这个多,现在开始搞定多渠道打包;

一、在 AndroidManifest.xml 里设置动态渠道变量

?
1
2
3
<!-- 自动升级类型  self、_360、baidu -->
         <meta-data android:name= "sdk_key_version_update_type" android:value= "${CHANNEL_VALUE}" >
</meta-data>

二、在 build.gradle 设置 productFlavors

这里假定我们需要打包的渠道为 360、google、百度 以及本公司

方法 1:直接在 app:gradle 下配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
android { 
     defaultConfig {
         ...
         flavorDimensions "versionCode"
     }
     productFlavors {
         google {
             manifestPlaceholders = [CHANNEL_VALUE: "google" ]
         }
         qh360 {
             manifestPlaceholders = [CHANNEL_VALUE: "360" ]
         }
         baidu {
             manifestPlaceholders = [CHANNEL_VALUE: "baidu" ]
         }
         self {
             manifestPlaceholders = [CHANNEL_VALUE: "self" ]
         }
    
}
或者批量修改
defaultConfig {
         ...
         flavorDimensions "versionCode"
     }
android { 
     productFlavors {
         kuan {}
         xiaomi {}
         qh360 {}
         baidu {}
         wandoujia {}
    
     productFlavors.all {
         flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
     }
}
上面这个配置的作用就是,为每个渠道包产生不同的 CHANNEL_VALUE 的值。这里需要注意的是你对应的标签与配置的 Name 获取逻辑一定要保持一致,否则会出现找不到的逻辑异常。

方法 2:通过快捷键 command + ; 打开配置界面。( Windows 对应的快捷键 Ctrl + Alt + Shift + S )并添加对应的配置渠道。如下图:

注意:这里仅修改 Name 即可,其他信息无特别需求不要修改

三、执行打包操作

打开 Build App 界面:
输入对应的信息点击 Next:
选中对应的渠道版本点击 Finish 即可在项目的 app: 目录 下看到对应的apk文件。

四、执行打包命令 ./gradlew assembleRelease

除了使用 AndroidStudio 图形打包操作以外,我们也可以使用命令行进行打包操作,具体步骤如下:
在 AndroidStudio 窗口左下角打开 Terminal 面板,输入 gradlew assembleRelease 命令即可。

五、配置签名文件

由于使用命令时打出的包是未签名的文件,这个和我们的一键打包还有些瑕疵。对此我们需要配置下签名文件。
首先在项目目录下的 gradle.properies 下配置签名文件的 keyPassWord 与 storePassWord 。
?
1
2
APK_SIGN_KEY_PASSWORD=******
APK_SIGN_STORE_PASSWORD=******
这样做得好处是没必要把对应的密码暴露出去
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//签名
signingConfigs {
     release{
         keyAlias '1'
         keyPassword APK_SIGN_KEY_PASSWORD
         storeFile file( '../snaillove.keystore' )
         storePassword APK_SIGN_STORE_PASSWORD
     }
     debug{
         keyAlias '1'
         keyPassword APK_SIGN_KEY_PASSWORD
         storeFile file( '../snaillove.keystore' )
         storePassword APK_SIGN_STORE_PASSWORD
     }
}
buildTypes {
     release {
         //启用混淆代码的功能
         minifyEnabled false
         //指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
         proguardFiles getDefaultProguardFile( 'proguard-android.txt' ), ' proguard-rules.pro '
         signingConfig signingConfigs.release
     }
}
注意:一定要把 signingConfigs 文件配置到 buildTypes 前面 否则会编译时抛出异常 Could not find property ‘debugConfig’ on SigningConfig container.

配置自定义打包路径与名称

生成对应的 APK 后,如果还需要我们手动的去修改对应的名称或者路径,是否根标题的一键还有些距离?OK,接着来,这里我们输出 apk 名称为 com_biniusports_app_bnsports_v1.0.0_20171205_baidu.apk 的路径:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
     android {
         // 自定义APK输出配置
         applicationVariants.all { variant ->
         variant.outputs.all { output ->
             def outputFile = output.outputFile
             if (outputFile != null && outputFile.name.endsWith( '.apk' )) {
                 // 输出apk名称为com_biniusports_app_bnsports_v1.0.0_20171205_baidu.apk
                 def fileName = "com_biniusports_app_bnsports_v${defaultConfig.versionName}_${getNowTime()}_${variant.productFlavors[0].name}.apk"
                 outputFileName = fileName
                 }
             }
         }
     }
//获取时间戳
def getNowTime() {
     def date = new Date()
     def now = date.format( 'yyyyMMdd' )
     return now
}
注意:Android Studio 版本大于 3.0 时不要使用v ariant.outputs.each 进行查找内容并且不要使用 new File(outputFile.parent, fileName),否则会抛出异常 Android Gradle 3.0.0-alpha2 plugin, Cannot set the value of read-only property ‘outputFile’。
完成以上配置后,即可开心的点击运行按钮进行签名打包了;
如出现如图的路径与对应的 APK 名称,恭喜你,本地一键多渠道打包已收入囊中。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值