zoukankan      html  css  js  c++  java
  • android studio学习----打包

    Gradle打包APP签名

    默认情况下,debug被配置成使用一个debug keystory。debug keystory使用了默认的密码和默认key及默认的key密码。debug构建类型会自动使用debug签名配置。在你的Module的build.gradle文件中添加:

        android {
            ......
            signingConfigs {
               myConfig{
                 storeFile file("yanbober.keystore")
                    storePassword "gradle"
                    keyAlias "gradle"
                    keyPassword "gradle"
                }
            }
    
           buildTypes{
             release {
                runProguard true
                zipAlignEnabled true
                // 移除无用的resource文件
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
                signingConfig  signingConfigs.myConfig
             } 
           }
        }

    虽然经常使用项目根目录的相对路径作为keystore的路径,但是也可以使用绝对路径,尽管这并不推荐(除了自动创建出来的debug keystore)。运行gradle clean gradle build即可生成签名混淆对齐的app。

    Gradle构建Android应用多渠道包(批量打包)

    Android应用的发布需要面对各种各样的市场,我们称之为渠道。通常作为开发者我们需要知道应用是从哪个渠道下载的。这种统计信息一般常用的是百度统计或者友盟统计。

    这里举例时使用友盟统计为例说明问题。原理是Gradle的Manifest Merger。

    在AndroidManifest.xml里配置所谓的PlaceHolder。

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

    在模块build.gradle文件的defaultConfig加上PlaceHolder,作用是声明CHANNEL_VALUE是可替换值的PlaceHolder,同时为其设置yanbober默认值。

        android {
            ......
    
            defaultConfig {
                ......
                manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
            }   
        }

    在模块的build.gradle文件里添加ProductFlavors配置。

    ProductFlavors其实就是可定义的product特性,与Manifest Merger使用就可以在一次编译过程中产生多个具有自己特性配置的版本。

    下面这个配置的作用就是为每个渠道包产生不同的CHANNEL_VALUE的值。

        android {
            ......
    
            defaultConfig {
                ......
                manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
            }   
            productFlavors {
                yanbober{}
                wandoujia{}
                xiaomi{}
                baidu{}
            }
            productFlavors.all { flavor ->
                flavor.manifestPlaceholders = [ CHANNEL_VALUE:name ]
            }
        }

    批量生成多渠道包:进入工程目录下运行gradlew assembleRelease。可以看到编译一共产生了4个apk,分别对应在productFlavors段定义的4个渠道。反编译打开AndroidManifest.xml就会发现CHANNEL这一段的配置已经被修改。

    生成单个渠道包:打开AS的Gradle Tasks面板模块有很多任务,直接双击对应的耽搁渠道任务生成对应的apk。

    用命令行单独生成xiaomi渠道使用gradlew assemblexiaomiRelease就好了。

  • 相关阅读:
    四则运算出题系统,java
    Javaweb测试
    《构建之法》 读书笔记(6)
    使用ProcDump在程序没有响应时自动收集dump
    NASA关于如何写出安全代码的10条军规
    C#和C++中的float类型
    避免在C#中使用析构函数Finalizer
    C#性能优化的一些技巧
    从bug中学习怎么写代码
    Code Smell那么多,应该先改哪一个?
  • 原文地址:https://www.cnblogs.com/wust221/p/5427017.html
Copyright © 2011-2022 走看看