热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GradleforAndroid使用之旅之gradle配置进阶

GradleBuildFilesinAndroid第三章了解BuildTypes和Flavors3.1了解BuildTypesdebug和releaseGradleAndroid插

Gradle Build Files in Android 第三章

了解Build TypesFlavors

3.1 了解Build Types

  • debugrelease

    Gradle Android 插件提供了两种build类型,debugrelease,他们两者都可以在buildTypes节点中配置。例如默认配置:

    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }

    同样可以直接加入debugtype ,两者配置都可以一样,这是用来区分打包类型。并且debug 默认 debuggable 为true。

  • minifyEnabled,shrinkResources

    开发很久的项目中通常会存在很多已经不再使用的资源文件,但是人工去删除又比较麻烦,可以使用这两个帮助删除不再使用的资源文件。

    android {
    buildTypes {
    release {
    minifyEnabled true
    shrinkResources true
    proguardFiles getDefaultProguardFile('proguard-android.txt'),
    Turn on code shrinking
    'proguard-rules.pro'
    } }
    }

    这两个属性已经要同时设置才能生效。

  • 设置后缀的属性

    为了方便辨别打包后的包是release或debug,可以根据不同的打包类型设置区分。如修改版本名称,修改包名。

    android {
    // ... other properties ... buildTypes {
    debug {
    applicationIDsuffix '.debug'
    versionNameSuffix '-debug'
    }
    // .. other build types ...
    } }

    这样配置后打包的debug包的包名会在后面增加.debug,版本名后也会相应的增加-debug,这样一个手机上可以很方便安装多个包。

3.2 Flavors and Variants

问题

如何做到不同一次build同一个APP不同版本功能的包。

解决方法

productFlavors用于build不同版本的包,他可能用于免费版,收费版,但是基于代码是一样的,只是有个别属性是不一样的。

例如

productFlavors {
baidu {
applicationId 'com.branch.www.gradledemo.baidu'
}
meizu {
applicationId 'com.branch.www.gradledemo.meizu'
}
wandoujia {
applicationId 'com.branch.www.gradledemo.wandoujia'
}

然后在build apk时可以选择需要的构建

《Gradle for Android 使用之旅之gradle配置进阶》 productFlavors_1.png

  • 每一个构建中可以定义自己的属性,所有的属性基于defaultConfig

    • applicationId
    • minSdkVersion
    • targetSdkVersion
    • versionCode
    • versionName
    • signingConfig
  • 每一个构建都可以有他自己的sourceresource,如下:

    • app/src/baidu/java
    • app/src/meizu/java
    • app/src/wandoujia/java

    • app/src/baidu/res
    • app/src/meizu/res/layout
    • app/src/wandoujia/res/values

    如:

    《Gradle for Android 使用之旅之gradle配置进阶》 productFlavors_2.png

    或 不共用源码

    《Gradle for Android 使用之旅之gradle配置进阶》 productFlavors_3.png

  • 使用manifestPlaceholders

    同时我们在常用的不同渠道号的apk中有渠道区分或者其他需要在AndroidManifest.xml中设置的。

    defaultConfig {
    applicationId "com.branch.www.gradledemo"
    minSdkVersion 18
    targetSdkVersion 24
    versionCode versionCodes
    versionName versionNames
    manifestPlaceholders = [BaiduMobAd_CHANNEL: "common", xxx: "xx"]
    }
    flavorDimensions 'one', 'two'
    productFlavors {
    baidu {
    manifestPlaceholders = [BaiduMobAd_CHANNEL: "baidu", xxx: "xx"]
    dimension "one"
    // applicationId 'com.branch.www.gradledemo.baidu'
    }
    meizu {
    manifestPlaceholders = [BaiduMobAd_CHANNEL: "meizu", xxx: "xx"]
    resValue "string", "app_name", "魅族"
    dimension "one"
    applicationId 'com.branch.www.gradledemo.meizu'
    }

    则可以这样使用它


  • 使用resValue

    meizu {
    resValue "string", "xxx_name", "魅族"
    dimension "one"
    applicationId 'com.branch.www.gradledemo.meizu'
    }

    使用时同样也是R.string.app_xxx_name,跟在string.xml中定义是一样的。

3.3 Merging Resources

问题

想要根据不同构建设置不懂的text,image等

解决方法

参照 3.2 ,每个构建都可以有自己的sourceresource,则可以很方面的设置,这里就不再重复验证。

3.4 Flavor Dimensions 的使用

问题

或许 3.2 Flavors还不够用,还可以增加,或有太多相同的可以合并。

解决方法

使用 flavor dimensions 合并baidu,meizu,wandoujia ,如:

flavorDimensions 'one', 'two'
productFlavors {
baidu {
dimension "one"
// applicationId 'com.branch.www.gradledemo.baidu'
}
meizu {
dimension "one"
applicationId 'com.branch.www.gradledemo.meizu'
}
wandoujia {
dimension "two"
applicationId 'com.branch.www.gradledemo.wandoujia'
}
one {
dimension "two"
}
two {
dimension "two"
}

然后build是就有1×3+1×3=6个包可以选择。

《Gradle for Android 使用之旅之gradle配置进阶》 flavorDimensions_1.png

定义了flavorDimensions后每一个构建都需要加上dimension否则报错

《Gradle for Android 使用之旅之gradle配置进阶》 flavorDimensions_error_1.png

与3.2 一样,可以设置属性,同样可以合并相同的。

3.5 Merging Java Sources Across Flavors

问题

怎么改变源码或其他java类

解决方法

在3.2中创建不同构建对应的文件夹

resources可以自动覆盖,并且可以有相同或不相同的而java类有点不一样,java类不能有和main中存在一样的,并且需要从main跳转的在每一个构建中都要存在,但是他们每一个的实现可以不一样。

例如:

《Gradle for Android 使用之旅之gradle配置进阶》 mering_java_class_1.png

可以看到one,two是组合构建

《Gradle for Android 使用之旅之gradle配置进阶》 mering_java_class_2.png

所以不所有包中都会有一个OtherActivity,并且他们的实现方式不一样。从main中的MainActivity 实现startActivity时,不同构建跳转到对应的构建。应该在每一个构建中自己的实现也就实现完全不一样。

[第一章:gradle的基础](Gradle Build Files in Android_1.md)


推荐阅读
  • 在最近的一系列文章,对midipadAPP,有一个关于一个radialgradiant渲染每个padview利用的探讨,对审美的原因&#x ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 四、连接屏幕流各位读者好!我们已经到了应用开发的一个重要阶段——连接屏幕。如您所知,我们在上一章 ... [详细]
  • 安卓中的刮刮卡视图,示例原文:https://www.gee ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • charles3.11.1抓https包
    结论先行:用的是安卓测试机,没加固之前的生产环境的安装包,可以抓到https请求加固之后的包【也就是要上应用市场的包】,抓不到https请求电脑上的操作:1.安装证书【电脑上安装了 ... [详细]
  • 这两天用到了ListView,写下遇到的一些问题。首先是ListView本身与子控件的焦点问题,比如我这里子控件用到了Button,在需要ListView中的根布局属性上加上下面的这一个属性:and ... [详细]
  • 1、不要使用国内第三方加固2、去掉android:debuggable”true”,不然会报一下错误,特别注意使用了一些第三方SDK,例如ShareSDKUploadfailedY ... [详细]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼所有编码完成之后,运行错误,跑不起来,有没有大神帮我看看,现在的错误我贴在下面ja ... [详细]
  • Android中怎么实现一个手电筒程序
    本篇文章为大家展示了Android中怎么实现一个手电筒程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。继 ... [详细]
author-avatar
liujiayan0529_584
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有