zoukankan      html  css  js  c++  java
  • android-gradle-深入浅出-五:build type

    默认情况下,Android插件自动为项目构建一个debug和一个release版本的应用。这两个版本的不同主要体现在在非开发机上的调试功能以及APK的签名方式。debug版本使用一个用公开的name/password创建的key来签名(这样构建的时候就不需要提示输入密码了)。release版本在构建的时候不会进行签名,而是稍后在做。
    这个可以使用gradle中的BuildType对象来进行配置。默认情况下,2个BuildType的实例会被创建,一个debug,一个release。Android插件允许自定义这两个实例,当然你也可以创建其他的build type。配置由buildTypes这个DSL来完成:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    android {
        buildTypes {
            debug {
                applicationIdSuffix ".debug"
            }
     
     
            jnidebug.initWith(buildTypes.debug)
            jnidebug {
                packageNameSuffix ".jnidebug"
                jniDebuggable true
            }
        }
    }
    上面的代码完成了下列配置:
    1.配置默认的debug Build Type
    设置debug版本的报名为<应用id>.debug,这样就可以在设备上同时安装debug和release版本了。
    2.创建一个新的BuildType,名字是jnidebug,同时配置它是复制自debug Build Type。
    配置jnidebug开启debug版本的JNI组件,添加一个不同的包名后缀。


    创建一个新的的Build Types非常简单,只需要在buildTypes下面通过调用initWith或者使用闭包添加一个新的元素。下表是可以配置的属性以及默认值:


    属性明 debug版本默认值 release或其他版本 默认值
    debuggable true false
    jniDebuggable false false
    renderscriptDebuggable false false
    renderscriptOptimLevel 3 3
    applicationIdSuffix null null
    versionNameSuffix null null
    signingConfig android.signingConfigs.debug null
    zipAlignEnabled false true
    minifyEnabled false false
    proguardFile N/A (set only) N/A (set only)
    proguardFiles N/A (set only) N/A (set only)


    出了这些属性,Build Types还可以用来配置代码和资源文件。针对每一个Build Type,一个新的对应的sourceSet会被创建,这个sourceSet使用一个默认的路径src/<buildtype名字>/。这就意味着Build Type的名字不能是main或者androidTest(这是由插件强制的),同时每个Build Type的名字必须是唯一的。


    和其他的source sets一样,Build Type中的source set路径也是可以配置
    1
    2
    3
    android {
        sourceSets.jnidebug.setRoot('foo/jnidebug')
    }

    另外,对每一个Build Type,一个新的assemble<buildtype名字>任务会被创建.前面我已经讲过assembleDebug和assembleRelease任务了,这里就可解释这两个任务的来源了.当debug和release Build Types被预先创建的时候,他们对应的assemble任务也会被一起创建.


    上面的build.gradle代码片段还会创建一个assembleJnidebug任务,assemble任务也会添加对assembleJniDebug任务的依赖,正如它对assembleDebug和assembleRelease任务的依赖一样。


    小提示:你可以使用 gradle aJ命令来运行assembleJnidebug任务。


    可能是使用场景:
    仅在debug模式下使用的权限,release模式不使用。
    debug时使用不同的实现
    debug模式使用不同的资源(比如当一个资源的值依赖于签名的时候)


    BuildType中的 代码/资源文件 将会被按照下列方式处理:
    manifest配置会被merge到app manifest中
    代码不会被merge,会被当做另一个代码目录(source folder)来使用
    资源文件会覆盖同名的main中的资源文件

    上一篇:Android对话框(二)ProgressDialog
    下一篇:Android官方入门文档[7]样式化操作栏
  • 相关阅读:
    实用的设计模式【一】---类设计法则
    vimium 使用心得
    记一次给部门做分享的心得
    centos7安装docker和docker compose【转】
    docker 部署 jenkins
    centos删除docker0虚拟网卡
    CentOS7查看和关闭防火墙
    .Net Core Autofac实现依赖注入
    【转】Docker基础
    【转】使用Docker+Jenkins自动构建部署
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4635260.html
Copyright © 2011-2022 走看看