当前位置:   article > 正文

Android studio build.gradle 基本设置配置_android studio中build.gradle在哪

android studio中build.gradle在哪

今天给大家示范一下基本设置和说明

ps:博主的这套配置让你的项目可以在任意电脑使用as打开无需额外文件、无需额外配置哦,当然as的版本是不能差距太大

复制项目减少体积见:android 快速方便的将项目复制到其他电脑上


首先根目录project的build.gradle

  1. // Top-level build file where you can add configuration options common to all sub-projects/modules.
  2. buildscript {
  3. repositories {
  4. maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
  5. maven { url 'https://jitpack.io' }
  6. google()
  7. jcenter()
  8. }
  9. dependencies {
  10. classpath 'com.android.tools.build:gradle:3.1.3'//gradle版本,大版本一般和as版本号对应,尽量匹配
  11. //3.0废弃并且作者不再维护
  12. // classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  13. // NOTE: Do not place your application dependencies here; they belong
  14. // in the individual module build.gradle files
  15. }
  16. }
  17. allprojects {
  18. repositories {
  19. maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
  20. maven { url 'https://jitpack.io' }
  21. google()
  22. jcenter()
  23. }
  24. }
  25. task clean(type: Delete) {
  26. delete rootProject.buildDir
  27. }
  28. ext {//为整个gradle添加,方便统一管理
  29. //用于编译的SDK版本
  30. COMPILE_SDK_VERSION = 27
  31. //最低支持Android版本
  32. MIN_SDK_VERSION = 16
  33. //目标版本
  34. TARGET_SDK_VERSION = 27
  35. //implementation "com.android.support:appcompat-v7:${APPCOMPAT_VERSION}"
  36. //或者implementation 'com.android.support:appcompat-v7:'+APPCOMPAT_VERSION
  37. //等等,反正就是字符串拼接
  38. APPCOMPAT_VERSION = "27.0.2"
  39. }

app里的build.gradle配置

  1. apply plugin: 'com.android.application'
  2. android {
  3. buildToolsVersion '27.0.3'//建议下载最新的
  4. compileSdkVersion COMPILE_SDK_VERSION//建议和targetSdkVersion一样
  5. defaultConfig {
  6. applicationId "等于packageName必填目前是你的包路径"
  7. minSdkVersion MIN_SDK_VERSION//适配的最低版本,建议4.0以上
  8. targetSdkVersion TARGET_SDK_VERSION//目标版本(可以暂时理解为最高版本),建议最新(6.07.0的api改动较大,需要全面测试)
  9. versionCode 25152//版本int值,一般是日期或者和version对应
  10. versionName "2.5152"//版本号
  11. multiDexEnabled true//true表示分包,基本是必须的了,app很容易就会出现65536的问题,了解更多见分包的博客
  12. flavorDimensions "default"//多渠道的维度,不会就填default,了解更多见①
  13. //增加静态值BUILD_TIME,代码中Build.BUILD_TIME即可获取
  14. buildConfigField("long", "BUILD_TIME", System.currentTimeMillis() + "L")
  15. ndk {//支持架构,v8a运行会有问题,建议不写
  16. //abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64"
  17. abiFilters "armeabi", "armeabi-v7a", "x86"
  18. }
  19. //在AndroidManifest.xml增加一些值(xml没有代码,但此处可以动态修改),了解更多见②
  20. manifestPlaceholders = [
  21. GAODE_KEY : "000000"//比如增加一个高德的keystring
  22. ]
  23. }
  24. signingConfigs {//debug时签名位置,请保存好自己的签名,不然以后有的你麻烦
  25. release {
  26. keyAlias '123456'
  27. keyPassword '123456'
  28. storeFile file('../123456.jks')//签名位置,..表示上一级目录,这里写的是相对位置:项目跟目录的123456.jks签名文件(这样的话别人也可以直接使用)
  29. storePassword '123456'
  30. }
  31. }
  32. buildTypes {//Build apk(打包)或build variants(debug)时选择的apk类型
  33. release {//正式,静态常量BuildConfig(这个类太多,注意不要导错!不要导错!不要导错!).DEBUG=false,线上包用这个
  34. minifyEnabled false//是否开启混淆,不会的暂时不开启,了解更多见混淆相关的博客
  35. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  36. signingConfig signingConfigs.release//告诉编译器debug时用哪个签名,不然会出现debug包和线上包替换安装都必须先卸载的情况
  37. //AndroidManifest增加值,了解更多见②
  38. manifestPlaceholders = [
  39. JPUSH_APPKEY : "111111"
  40. ]
  41. }
  42. debug {//测试,静态常量BuildConfig.DEBUG=true,测试包
  43. minifyEnabled false
  44. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  45. //AndroidManifest增加值,了解更多见②
  46. manifestPlaceholders = [
  47. JPUSH_APPKEY : "123456"
  48. ]
  49. signingConfig signingConfigs.release
  50. }
  51. //不混淆,便于debug
  52. NoProguard {//此处表示可以自定义
  53. initWith debug//来源于debug的自定义
  54. minifyEnabled false
  55. }
  56. }
  57. dexOptions {//此处不需要改:项目大了有时java会内存溢出,这里表示扩大java运行内存
  58. javaMaxHeapSize "4g"
  59. }
  60. productFlavors {
  61. //一般多渠道用的,和上面的多渠道对应,了解更多见①
  62. yingyongbao {
  63. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
  64. flavorDimensions "default"
  65. }
  66. ali {
  67. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]
  68. flavorDimensions "default"
  69. }
  70. }
  71. lintOptions {//抑制某些错误继续打包:此处不需要改,有问题解决问题,不要在这加
  72. //禁用掉丢失多国语言的错误提示
  73. disable 'MissingTranslation'
  74. //下面两个是忽略lint的报错信息继续打包,不建议使用.孩子哭就捂住嘴是解决不了问题的
  75. // checkReleaseBuilds false
  76. // abortOnError false
  77. }
  78. //这个方法是将打包生成的apk修改到项目根目录.apk目录下,生成的apk都需要在此目录中查找,不会用的可以删除这段
  79. applicationVariants.all { applicationVariantImpl ->
  80. //输出目录修改
  81. if (!applicationVariantImpl.getPackageApplication().outputDirectory.toString().contains("/build/")) {
  82. //不是build就输出到根目录下/.apk
  83. applicationVariantImpl.getPackageApplication().outputDirectory = new File(".apk", getRootDir())
  84. }
  85. applicationVariantImpl.outputs.all {apkVariantOutputImpl ->
  86. //获取app名称
  87. InputStreamReader xmlIsr = new InputStreamReader(new FileInputStream(getProjectDir().getAbsolutePath() + "/src/main/res/values/strings.xml"))
  88. String readSt, appName = ""
  89. while ((readSt = xmlIsr.readLine()) != null) {
  90. if (readSt.contains("app_name")) {
  91. appName = readSt.split(">")[1].split("<")[0]
  92. break
  93. }
  94. }
  95. xmlIsr.close()
  96. //修改apk的文件名
  97. if (applicationVariantImpl.buildType.debuggable) {
  98. apkVariantOutputImpl.apkData.outputFileName = appName + "测试V${defaultConfig.versionName}.apk"
  99. } else {
  100. apkVariantOutputImpl.apkData.outputFileName = appName + "V${defaultConfig.versionName}.apk"
  101. }
  102. }
  103. }
  104. }
  105. repositories {//此处不需要改
  106. flatDir {//aar的配置
  107. dirs 'libs'
  108. }
  109. }
  110. dependencies {
  111. //新版的导入为api,旧版的导入为compile
  112. api fileTree(include: ['*.jar'], dir: 'libs')//一次性导入所有libs目录下的jar
  113. //基础包
  114. api project(':mylibrary')
  115. api 'com.android.support:gridlayout-v7:' + APPCOMPAT_VERSION//support包需要统一,不然某些方法可能会崩溃
  116. }

①多渠道设置

举例(这只是个例子,实际运用请不要模仿,主意原因applicationId和包路径不一样会导致一些第三方识别错误的问题(貌似只有微信),比如wx的分享支付(直接调的intent跳转,两个不一样的话根本跳不回来)。谷歌设想是好的,但人(微)各(信)有(坑)志(爹)):

项目需求,要10个完全一样的app,第一时间大家都想到的是复制10个,然后改包名吧。但是当项目需求修改时每次都要复制n遍,这岂不是要上天...

这时applicationId应运而生,你只需要将applicationId改10次就会发现你安装了10个app,如下。但是作为程序猿,每次改applicationId、app名等也是也是一个体力活啊。

  1. 代码的包路径com.a.0,固定不改
  2. applicationId "com.a.0"//这是原来默认的进程名com.a.0,getPackageName为com.a.0
  3. //增加str资源
  4. resValue "string", "app_name", "app0“
  5. //修改applicationId
  6. applicationId "com.a.a"//进程名com.a.a,getPackageName为com.a.a(此时已经不是包路径了)
  7. //增加str资源
  8. resValue "string", "app_name", "appa“
  9. applicationId "com.a.b"//进程名com.a.b,同理
  10. //增加str资源
  11. resValue "string", "app_name", "appb“

于是多渠道应运而生,当你使用多渠道时,问题又来了,类似友盟这种多渠道配置早已占坑,根本没法动态修改applicationId(不然怎么叫多渠道呢...)

  1. //理想情况是这样的
  2. productFlavors {
  3. app0 {
  4. applicationId "com.a.0"
  5. //增加str资源
  6. resValue "string", "app_name", "app0“
  7. }
  8. appa {
  9. applicationId "com.a.a"
  10. //增加str资源
  11. resValue "string", "app_name", "appa“
  12. }
  13. ...
  14. }
  15. //但是类似友盟这种多渠道早已占坑
  16. yingyongbao {
  17. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
  18. }
  19. ali {
  20. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]
  21. }
  22. //这两个完全冲突,想合并得需要渠道数*项目数的代码倍数,每增加一个项目都麻烦死

而此时二维的多渠道再次打破这一僵局,这就是flavorDimensions这个主角

  1. defaultConfig {
  2. // applicationId 不需要了,多渠道中配置
  3. flavorDimensions "chanel","appType"
  4. ...
  5. }
  6. productFlavors {
  7. Yyb_ {
  8. dimension "channel"
  9. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
  10. }
  11. Ali_ {
  12. dimension "channel"
  13. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]
  14. }
  15. ...
  16. // 不同的APP
  17. app0_ {
  18. dimension "appType"
  19. //主意细节,初始化applicationId比较晚,gradle的其他地方可能引用不了
  20. applicationId "com.a.0"
  21. //增加str资源
  22. resValue "string", "app_name", "app0“
  23. }
  24. appa_ {
  25. dimension "appType"
  26. applicationId "com.a.a"
  27. //增加str资源
  28. resValue "string", "app_name", "appa“
  29. }
  30. //每增加一个项目只需要再加个就行了
  31. ...
  32. }

②AndroidManifest.xml动态修改,比如原配置里build.gradle极光的key正式和测试的区分,AndroidManifest直接使用即可。

不同级别的manifestPlaceholders最后会合并在一起,你不用担心GAODE_KEY和JPUSH_APPKEY会冲突

applicationId也可以使用(虽然会报错):${applicationId}

  1. <meta-data
  2. android:name="com.amap.api.v2.apikey"
  3. android:value="${GAODE_KEY}"/>


转载请注明出处:王能的博客Android studio build.gradle 基本设置配置_王能的博客-CSDN博客

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

闽ICP备14008679号