当前位置:   article > 正文

android studio 的gradle 详细配置说明_v2signingenable

v2signingenable

通过这篇文章,你可以简单实现多渠道,或者说定制化的apk打包,实现一次打包多个apk,充分了解gradle的各项配置,解决资源冲突问题。

 

as 的gradle配置主要分为三种:

1、项目全局配置的build.gradle

2、每个moudle 下的build.gradle

3、自定义的xxx.gradle (xxx为自定义文件名)

下面对这些配置进行逐一讲解

自定义xxx.gradle

  1. 在项目目录下新建一个config.gradle文件(名字自定义)
  2. /**
  3. * 自定义参数,必须为ext ,因为该字段为gradle默认的扩展属性配置
  4. *
  5. * 使用:
  6. * 在需要引用该文件的moudle/build.gradle 顶部输入:apply from: "config.gradle"
  7. * 这条命令指明把这个config.gradle 的配置加载到当前gradle配置中,如果在项目的build.gradle
  8. * 引入,则该配置为全局配置,可在项目中任意moudle的gradle中使用。
  9. *
  10. * 引用自定义的值:
  11. * 在moudle中引入:${"project.ext.android.versionName"}
  12. * 在项目moudle中引入:${"rootProject.ext.android.versionName"}
  13. *
  14. * 注意:
  15. * 引用时要使用双引号,单引号不会解释变量,直接作为字符串,双引号才会解释变量
  16. * println("${project.ext.android.versionCode}")输出:1
  17. * println('${project.ext.android.versionCode}')输出:${project.ext.android.versionCode}
  18. *
  19. * def修饰的对象无法在当前文件外引用
  20. *
  21. * 使用这种方式配置项目,方便项目的迁移,或者各个moudle的统一引用,最重要的是B格高
  22. *
  23. */
  24. ext{
  25. android = [
  26. compileSdkVersion: 26,
  27. buildToolsVersion: '27.0.3',
  28. applicationId : "com.dzt.launchmode",
  29. minSdkVersion : 15,
  30. targetSdkVersion : 26,
  31. versionCode : 1,
  32. versionName : "1.0"
  33. ]
  34. //只能内部使用
  35. def dependVersion = [
  36. support : "26.+",
  37. retrofit : "2.1.0",
  38. butterknife: "8.4.0",
  39. blockcanary: "1.2.1",
  40. leakcanary : "1.4-beta2"
  41. ]
  42. dependencies = [
  43. "appcompat-v7" : "com.android.support:appcompat-v7:${dependVersion.support}",
  44. "recyclerview-v7" : "com.android.support:recyclerview-v7:${dependVersion.support}",
  45. "design" : "com.android.support:design:${dependVersion.support}",
  46. ]
  47. }

项目build.gradle配置

  1. //该配置用于引入自定义的gradle配置文件
  2. apply from:'config.gradle'
  3. //buildScript是用来加载gradle脚本自身需要使用的资源,可以声明的资源包括依赖项、第三方插件、maven仓库地址等
  4. buildscript {
  5. //指定仓库地址
  6. repositories {
  7. //google仓库
  8. google()
  9. //maven的中心仓库
  10. jcenter()
  11. }
  12. //依赖库
  13. dependencies {
  14. // classpath一般是添加buildscript本身需要运行的东西
  15. classpath 'com.android.tools.build:gradle:3.6.3'
  16. //接入firebasse
  17. // classpath 'com.google.gms:google-services:4.3.3'
  18. // classpath 'com.kezong:fat-aar:1.2.11'
  19. // NOTE: Do not place your application dependencies here; they belong
  20. // in the individual module build.gradle files
  21. }
  22. }
  23. //配置工程所需仓库、依赖项
  24. allprojects {
  25. repositories {
  26. google()
  27. jcenter()
  28. //本地仓库(默认用户名/.m2/repository)
  29. // mavenLocal()
  30. //指定仓库地址
  31. // maven { url 'D://Users/maven' }
  32. }
  33. }
  34. //事务,可以自定义,这里是清除build目录缓存
  35. task clean(type: Delete) {
  36. delete rootProject.buildDir
  37. }
  38. //自定义参数,和config.gradle配置一样
  39. //ext {
  40. // compileSdkVersion = 28
  41. // supportLibVersion = "28.0.0"
  42. //}

moudle下的build.gradle配置

  1. //该配置指明该moudle是一个library库,不是一个应用库
  2. apply plugin: 'com.android.library'
  3. //该配置用于引入自定义的gradle配置文件
  4. //apply from: "../config.gradle"
  5. //该moudle的编译环境,参数配置
  6. android {
  7. //指定编译的版本
  8. compileSdkVersion 26
  9. //指定构建版本
  10. buildToolsVersion "29.0.2"
  11. //示例引用自定义的值
  12. // buildToolsVersion ${"rootProject.ext.android.buildToolsVersion"}
  13. defaultConfig {
  14. //指定apk最低支持的os版本
  15. minSdkVersion 19
  16. //指定apk目标运行版本
  17. targetSdkVersion 26
  18. //开发版本号
  19. versionCode 2
  20. //用户能看到的版本号
  21. versionName "1.0.2"
  22. //开启分包(当方法数超过时会生成多个dex)
  23. // multiDexEnabled true
  24. //指定打包时添加的so库版本
  25. // ndk {
  26. // abiFilters "armeabi", "armeabi-v7a", "x86"
  27. // }
  28. }
  29. //签名配置
  30. signingConfigs {
  31. //release只是一个名称,可自定义
  32. release {
  33. //签名别名
  34. keyAlias 'test'
  35. //别名密码
  36. keyPassword 'test12'
  37. //签名文件
  38. storeFile file('../test.jks')
  39. //签名密码
  40. storePassword 'test12'
  41. //是否使用v2签名
  42. v2SigningEnabled false //禁用v2签名
  43. }
  44. debug {
  45. //签名别名
  46. keyAlias 'test'
  47. //别名密码
  48. keyPassword 'test12'
  49. //签名文件
  50. storeFile file('../test.jks')
  51. //签名密码
  52. storePassword 'test12'
  53. //是否使用v2签名
  54. v2SigningEnabled false //禁用v2签名
  55. }
  56. test {
  57. //签名别名
  58. keyAlias 'test'
  59. //别名密码
  60. keyPassword 'test12'
  61. //签名文件
  62. storeFile file('../test.jks')
  63. //签名密码
  64. storePassword 'test12'
  65. //是否使用v2签名
  66. v2SigningEnabled false //禁用v2签名
  67. }
  68. }
  69. //构建类型配置(必须在signingConfigs配置后面)
  70. buildTypes {
  71. release {
  72. //启用资源优化压缩
  73. // shrinkResources true
  74. // //启用代码优化
  75. // minifyEnabled true
  76. //指定使用哪个签名配置
  77. signingConfig signingConfigs.release
  78. //启用代码混淆 proguard-android-optimize.txt:为基本混淆配置默认即可,proguard-rules.pro:扩展混淆配置
  79. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  80. }
  81. debug {
  82. minifyEnabled false
  83. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  84. }
  85. mytest {
  86. minifyEnabled false
  87. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  88. }
  89. }
  90. // 维度,一维(值可自定义,维度也可自定义,用,分隔开,可以自定构建apk,实现打包多个apk,差异化打包apk)
  91. // flavorDimensions "flavor"
  92. // 二维(值可自定义,维度也可自定义,用,分隔开)
  93. flavorDimensions "modelA", "modelB"
  94. /**
  95. * 参考文档:https://juejin.im/entry/5a586bfaf265da3e2c3808c5
  96. * 上面定义两个维度,modelA,modelB,下面就通过这两个维度配置差异化apk
  97. * 配置好productFlavors后,项目编译时会生成四个apk
  98. * demoAtestADebug
  99. * demoAtestARelease
  100. * demoBtestADebug
  101. * demoBtestARelease
  102. * 由此可见编译时会把你所有配置的维度组合打包各种差异化的apk
  103. */
  104. productFlavors {
  105. demoA {
  106. //配置使用哪个维度
  107. dimension "modelA"
  108. //配置差异化信息
  109. applicationId "com.ckj.myapplication1"
  110. versionCode 1
  111. versionName "1.0"
  112. /**
  113. * 定义占位符,可以androidmanifest.xml中使用:
  114. * <meta-data
  115. * android:name="UMENG_CHANNEL"
  116. * android:value="${UMENG_CHANNEL_VALUE}" />
  117. */
  118. manifestPlaceholders = [UMENG_CHANNEL_VALUE:"value1"]
  119. }
  120. demoB {
  121. dimension "modelA"
  122. /**
  123. * 自定义常亮值,添加完后同步下Gradle就可以在编译生成目录
  124. * (app/build/generated/source/buildConfig)下的BuildConfig.java
  125. * 参数代表意义:数据类型、键、值
  126. */
  127. buildConfigField "boolean", "SUPPORT_AUTO_UPDATE_FEATURE", "false"
  128. }
  129. testA {
  130. dimension "modelB"
  131. }
  132. }
  133. /**
  134. * demoA上面是配置版本,参数信息,sourceSets是配置代码,资源(aidl、assets、res、jni...)信息
  135. */
  136. sourceSets {
  137. //main是默认source
  138. main {
  139. jniLibs.srcDirs = ['libs']
  140. }
  141. //这个demoA需要在productFlavors中配置
  142. demoA{
  143. /**
  144. * 需要在src新建一个model/java
  145. * 注意:main目录下的代码是会和model/java下的代码合并打包到apk的
  146. * 并不是只打包model/java,所以model/java只适合存放差异化代码,这个目录是可自定义的
  147. */
  148. java.srcDirs('src/model/java')
  149. //需要在src新建一个model/assets
  150. assets.srcDirs('src/model/assets')
  151. //类推
  152. aidl.srcDirs('src/model/aidl')
  153. res.srcDirs('src/model/res')
  154. jniLibs.srcDirs('src/model/libs')
  155. }
  156. }
  157. /**
  158. * 也是从不同维度切分apk,使apk体积缩小
  159. * 参考文档:https://juejin.im/post/5ddfe513e51d45027e2a7e96
  160. */
  161. splits {
  162. //根据像素切分
  163. density {
  164. //是否开启切分
  165. enable true
  166. //去掉这些像素,只打包其他尺寸apk,例如:hdpi_apk,xxhdpi_apk...
  167. exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi"
  168. }
  169. //根据架构切分
  170. abi {
  171. enable true
  172. exclude 'x86','arm64-v8a'
  173. // 重置包含的目录,因为已经是包含全部
  174. reset()
  175. // 设置包含,只打包这些架构的apk,调用前需要先用 reset 将默认清除
  176. include 'armeabi-v7a', 'x86'
  177. // 是否打出包含全部的apk,包含全部架构的apk
  178. universalApk true
  179. }
  180. //根据语言切分
  181. language {
  182. enable = true
  183. //同理:include包含,exclude:剔除
  184. include "fr", "zh", "en"
  185. }
  186. }
  187. }
  188. //仓库
  189. repositories {
  190. flatDir {
  191. dirs 'libs' // aar目录
  192. }
  193. }
  194. /**
  195. * 添加依赖有两种方式:api、implementation
  196. * api:如果其他moudle引用了该moudle,则其他moudle也可以使用该moudle的依赖库
  197. * implementation:其他moudle无法使用该moudle的依赖库
  198. *
  199. * 注:gradle引用远程库,如果存在相同库,默认会引入高版本的
  200. * 所以出现版本冲突都是和本地库的冲突,解决方式是删除本地库,或者剔除远程库
  201. */
  202. //该moudle的依赖配置
  203. dependencies {
  204. //把一个文件夹里的所有.jar文件都添加进来,可减少本地库的逐个依赖配置
  205. api fileTree(include: ['*.jar'], dir: 'libs')
  206. //引入一个moudle
  207. api project(':overseas')
  208. //引入一个远程第三方库
  209. api('com.squareup.retrofit2:retrofit:2.2.0')
  210. //引入本地库,注意是带有files的
  211. api files('alipaysdk_15.7.3.jar','gson-2.5.jar')
  212. //引用本地aar,name:库名 ext:库类型(同时需要制定aar的存放路径,具体参考上面的仓库配置repositories)
  213. api(name: 'zbar-core', ext: 'aar')
  214. //引入一个远程第三方库
  215. implementation ('com.squareup.retrofit2:retrofit:2.2.0'){
  216. /**
  217. * exclude用来剔除传递依赖的库
  218. * 示例解释:
  219. * group:代表依赖库的组,一个组可以有多个module(分支)
  220. * module:代表这个组下面的某个分支
  221. * 如果不填写moudle,就会把整个group都剔除,所以需要根据实际情况剔除
  222. */
  223. exclude(group:'com.squareup.okio',module:'okio')
  224. }
  225. implementation ('com.android.support:appcompat-v7:26.0.0') {
  226. /**
  227. * 不指定group,gralde会默认使用引用库的group
  228. * 如下:group=com.android.support
  229. */
  230. exclude (module: 'support-v4')
  231. }
  232. //效果等同:implementation 'com.android.support:multidex:1.0.1'
  233. implementation group: 'com.android.support', name: 'multidex', version: '1.0.1'
  234. //只有在构建demoA时才会引入该库
  235. demoAApi('com.squareup.retrofit2:retrofit:2.2.0')
  236. //只有在构建demoB时才引入该库(语法:构建类型demoA(在productFlavors中的配置)+Api(或Implementation))
  237. demoBApi files('alipaysdk_15.7.3.jar','gson-2.5.jar')
  238. }
  239. //自定任务,这里是打包一个jar包
  240. task makeJar(type: Copy) {
  241. //打印信息
  242. println("core_${project.ext.android.versionCode}.jar")
  243. from('build/intermediates/aar_main_jar/debug/classes.jar', configurations.compile)
  244. into('build/outputs/jar')
  245. rename('classes.jar', "core_${project.ext.android.versionCode}.jar")
  246. }
  247. //把这个任务添加到build之后, 先执行build,再执行该任务
  248. makeJar.dependsOn(build)

如有错误还请大神指出,谢谢

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

闽ICP备14008679号