当前位置:   article > 正文

Android中Gradle常用的配置_--extra-packages

--extra-packages

1、Gradle是什么?

  1. Gradle是一个自动化构建工具
  2. 兼容Maven等仓库
  3. 基于Groovy的特定领域语言来声明名目设置

2、GradleWraper

  1. Gradle Wrapper是一个脚本文件
  2. 它会在没有安装Gradle的情况下为我们下载Gradle,之后我们就可以使用gradlew命令,像使用gradle一样来使用Gradle了
  3. GradleWraper简化了gradle的安装部署

3、 Gradle文件结构

  • settings.gradle:整个Project的配置文件,可以设置包含哪些module
  • build.gradle (Project的gradle文件):整个Project的配置文件
  • build.gradle(Module):Module的配置文件
  • gradle.properties:可以在 gradle.properties 文件中配置一些变量

4、Gradle命令

  • gradlew clan: 清除app目录下build文件夹

  • gradlew check:执行lint检查

  • gradlew assemble:打release或debug包

  • gradlew build:执行check和assemble两步

  • gradlew assembleRelease/gradlew assembleDebug: 打全部渠道的release或debug包

5、Gradle常见配置

1、指定仓库

  1. repositories {
  2. jcenter()
  3. }

2、指定依赖

  1. dependencies {
  2. classpath 'com.android.tools.build:gradle:1.3.1'
  3. }

3、设置脚本运行环境

buildscript{}

4、 声明引用的插件

apply plugin: 'com.android.application'

6、设置Android项目的参数

  1. android {
  2. // 编译SDK的版本
  3. compileSdkVersion 22
  4. // build tools的版本
  5. buildToolsVersion "23.0.1"
  6. //aapt配置
  7. aaptOptions {
  8. //不用压缩的文件
  9. noCompress 'pak', 'dat', 'bin', 'notice'
  10. //打包时候要忽略的文件
  11. ignoreAssetsPattern "!.svn:!.git"
  12. //分包
  13. multiDexEnabled true
  14. //--extra-packages是为资源文件设置别名:意思是通过该应用包名+R,com.android.test1.R和com.android.test2.R都可以访问到资源
  15. additionalParameters '--extra-packages', 'com.android.test1','--extra-packages','com.android.test2'
  16. }
  17. //默认配置
  18. defaultConfig {
  19. //应用的包名
  20. applicationId "com.example.heqiang.androiddemo"
  21. minSdkVersion 21
  22. targetSdkVersion 22
  23. versionCode 1
  24. versionName "1.0"
  25. }
  26. //编译配置
  27. compileOptions {
  28. // java版本
  29. sourceCompatibility JavaVersion.VERSION_1_7
  30. targetCompatibility JavaVersion.VERSION_1_7
  31. }
  32. //源文件目录设置
  33. sourceSets {
  34. main {
  35. //jni lib的位置
  36. jniLibs.srcDirs = jniLibs.srcDirs << 'src/jniLibs'
  37. //定义多个资源文件夹,这种情况下,两个资源文件夹具有相同优先级,即如果一个资源在两个文件夹都声明了,合并会报错。
  38. res.srcDirs = ['src/main/res', 'src/main/res2']
  39. //指定多个源文件目录
  40. java.srcDirs = ['src/main/java', 'src/main/aidl']
  41. }
  42. }
  43. //签名配置
  44. signingConfigs {
  45. debug {
  46. keyAlias 'androiddebugkey'
  47. keyPassword 'android'
  48. storeFile file('keystore/debug.keystore')
  49. storePassword 'android'
  50. }
  51. }
  52. buildTypes {
  53. //release版本配置
  54. release {
  55. debuggable false
  56. // 是否进行混淆
  57. minifyEnabled true
  58. //去除没有用到的资源文件,要求minifyEnabled为true才生效
  59. shrinkResources true
  60. // 混淆文件的位置
  61. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
  62. signingConfig signingConfigs.debug
  63. //ndk的一些相关配置,也可以放到defaultConfig里面。
  64. //指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,arm-v8之类的so会被过滤掉)
  65. ndk {
  66. abiFilter "armeabi"
  67. }
  68. }
  69. //debug版本配置
  70. debug {
  71. debuggable true
  72. // 是否进行混淆
  73. minifyEnabled false
  74. //去除没有用到的资源文件,要求minifyEnabled为true才生效
  75. shrinkResources true
  76. // 混淆文件的位置
  77. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
  78. signingConfig signingConfigs.debug
  79. //ndk的一些相关配置,也可以放到defaultConfig里面。
  80. //指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,arm-v8之类的so会被过滤掉)
  81. ndk {
  82. abiFilter "armeabi"
  83. }
  84. }
  85. }
  86. // lint配置
  87. lintOptions {
  88. //移除lint检查的error
  89. abortOnError false
  90. //禁止掉某些lint检查
  91. disable 'NewApi'
  92. }
  93. }

7、 几种依赖的区别

compile:我们最常用的依赖,编译时提供并打包进apk
provided:编译时提供但不打包进apk
在gradlew 3.0 中complie过期了,用implementation和api替代
api = compile
implemention:将该依赖隐藏在内部,而不对外部公开

8、为什么会有两套repositories和dependencies

  1. buildscript里面的那个是插件初始化环境用的,用于设定插件的下载仓库
  2. android 中是工程依赖的一些模块和远程library的下载仓库的

9、排除依赖传递,解决依赖冲突

  1. exclude: 设置不编译指定的模块,排除指定模块的依赖
  2. transitive:用于自动处理子依赖项,默认为true,gradle自动添加子依赖项。设置为false排除所有的传递依赖
  3. force:强制设置某个模块的版本。

10、Gradle打包时的Proguard

  • 通过在buildTypes中配置minifyEnable来开启和关闭proguard
  • 通过proguardFiles 来配置混淆参数与keep的内容
  • 混淆的作用:
    1. 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。
    2. 优化(Optimize):对字节码进行优化,移除无用的指令。
    3. 混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。
    4. 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

11、依赖中的动态版本声明

  1. dependencies {
  2. //依赖最新的1.x版本
  3. compile "org.codehaus.cargo:cargo-ant:1.+"
  4. }

12、多渠道打包

  • 1、在AndroidManifest.xml配置mete-data

    1. <meta-data
    2. android:name="UMENG_CHANNEL"
    3. android:value="Channel_ID" />
  • 2、配置productFlavors

    1. android {
    2. productFlavors {
    3. xiaomi {
    4. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
    5. }
    6. _360 {
    7. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
    8. }
    9. baidu {
    10. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
    11. }
    12. wandoujia {
    13. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
    14. }
    15. }
    16. }

    或者批量修改

    android {

    1. productFlavors {
    2. xiaomi {}
    3. _360 {}
    4. baidu {}
    5. wandoujia {}
    6. }
    7. productFlavors.all {
    8. flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    9. }

    }

  1. * 3、在APP内读取 mete-data 配置确定渠道
  2. * 4、然后用 ./gradlew assembleRelease 这条命令会把Product Flavor下的所有渠道的Release版本都打出来。
  3. ### 13、[哪些不做混淆](https://www.cnblogs.com/zhangmiao14/p/7098168.html)
  4. > 1. Android系统组件
  5. > 2. JNI
  6. > 3. 反射
  7. > 4. WebView的JS调用
  8. > 5. 内部类
  9. > 6. Annottation
  10. > 7. enum
  11. > 8. 范型
  12. > 9. 序列化
  13. > 10. 第三方
  14. ### 14、[Gradle 生命周期](https://blog.csdn.net/u013626215/article/details/51490643)
  15. > - 初始化阶段:会去读取根工程中setting.gradle中的include信息,决定有哪几个工程加入构建,
  16. > 创建project实例,比如下面有三个工程: include ':app', ':lib1', ':lib2
  17. > - 配置阶段:,会去执行所有工程的build.gradle脚本,配置project对象,一个对象由多个任务组成,
  18. > 此阶段也会去创建、配置task及相关信息。
  19. > - 运行阶段:根据gradle命令传递过来的task名称,执行相关依赖任务
  20. ### 15、[如何通过Gradle配置差异较大(20%差异)的多渠道包](https://www.jianshu.com/p/98c4e3de4417)
  21. > 通过配置productFlavors,将区别代码放置在对应的问价下,gradle会自动打出相应包


来源: 极客熊猫
作者: Mikyou
链接: http://www.youkmi.cn/2020/01/01/android-zhong-gradle-chang-yong-de-pei-zhi/
本文章著作权归作者所有,任何形式的转载都请注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/296368
推荐阅读
相关标签
  

闽ICP备14008679号