• Gradle使用方法与技巧


    Gradle尽管比Android Studio早出现,但直到成了官方IDE之后,Gradle才逐渐流行起来。然而,我们是否将这个强大的自动化构建系统的优势发挥地淋漓尽致了呢? 

    项目与build的特定全局变量 

    用gradle可以自动生成BuildConfig类,其中能够生成附加字段。这对配置服务器URL之类的工作十分有用,使用它也能轻松开启或关闭功能。 

    Java代码 
    1. defaultConfig {  
    2.     buildConfigField "String", "TWITTER_TOKEN", '"SDASJHDKAJSK"'  
    3. }  
    4. buildTypes {  
    5.     debug {  
    6.       buildConfigField "String", "API_URL", '"http://api.dev.com/"'  
    7.       buildConfigField "boolean", "REPORT_CRASHES", "true"  
    8.     }  
    9.     release {  
    10.       buildConfigField "String", "API_URL", '"http://api.prod.com/"'  
    11.       buildConfigField "boolean", "REPORT_CRASHES", "false"  
    12.     }  
    13. }  


    可以从BuildConfig的final类BuildConfig.TWITTER_TOKEN,BuildConfig.REPORT_CRASHES与BuildConfig.API_URL进行访问,后两个根据所在的build类不同也会有差异。 

    每个buildtype的名字、版本与app id都不同 

    这样一来使用者就能同时安装发布版与debug版了(切记,在安卓系统中无法安装同名的不同应用)。用户可以在崩溃报告工具中以不同的版本名筛选问题与崩溃。通过查看应用名很容易找到目前所运行的版本。 

    Java代码 
    1. android {  
    2.     buildTypes {  
    3.         debug {  
    4.             applicationIdSuffix ".debug"  
    5.             versionNameSuffix "-debug"  
    6.             resValue "string", "app_name", "CoolApp (debug)"  
    7.             signingConfig signingConfigs.debug  
    8.         }  
    9.         release {  
    10.             resValue "string", "app_name", "CoolApp"  
    11.             signingConfig signingConfigs.release  
    12.         }  
    13.     }  


    隐私信息 

    在Android系统中,所有应用都必须经过证书数字签名才能安装,以便系统能够识别应用的作者。而其中有些属于敏感信息,不应被别人看到。 

    使用者永远不该将这类信息check in到源代码管理工具中。 

    有些人主张,每个人都应当有自己的本地配置文件,甚至用全局的~/.gradle/build.gradle,不过如果你要执行持续集成(CI)或部署,特别是没有自己CI服务器的情况下,不应在CVS系统里存放任何类型的纯文本凭证。 

    Java代码 
    1. signingConfigs {  
    2.     release {  
    3.         storeFile     "${System.env.COOL_APP_PRIVATE_KEY}"  
    4.         keyAlias      "${System.env.COOL_APP_ALIAS}"  
    5.         storePassword "${System.env.COOL_APP_STORE_PW}"  
    6.         keyPassword   "${System.env.COOL_APP_PW}"  
    7.     }  
    8. }  


    因此,可以通过环境变量将敏感信息提供给自己的持续集成服务器,而无需担心将任何“危险”信息check in到公司了。 

    自动生成版本名称(versionName)与版本号(versionCode) 

    将你的版本拆分成逻辑组件,分别管理。不用再考虑版本号修改的是否正确,也不用担心版本名更新的是否合适了。 

    Java代码 
    1. def versionMajor = 1  
    2. def versionMinor = 0  
    3. def versionPatch = 0  
    4. android {  
    5.     defaultConfig {  
    6.         versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch  
    7.         versionName "${versionMajor}.${versionMinor}.${versionPatch}"  
    8.     }  
    9. }  


    给BuildConfig增加git hash与build时间 

    Java代码 
    1. def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()  
    2. def buildTime = new Date().format("yyyy-MM-dd'T'HH:mm:ss'Z'", TimeZone.getTimeZone("UTC"))  
    3. android {  
    4.     defaultConfig {  
    5.         buildConfigField "String", "GIT_SHA", ""${gitSha}""  
    6.         buildConfigField "String", "BUILD_TIME", ""${buildTime}""  
    7.     }  
    8. }  


    现在有两个可用变量:BuildConfig.GIT_SHA和BuildConfig.BUILD_TIME,用来结合日志与提交信息或者build时间再好不过。 

    扣紧安全带 

    想要快速完成部署,只需创建dev类型,将minSdkVersion设定为21。注意:这样做的话,就无法获得针对真实minSdk的合适linting了。因此很明显只能用在日常工作中,而不能用在发布时。这样一来,安卓gradle插件可以将应用程序的每个模块构建为不同的dex文件(pre-dex),并生成可以在Android Lollipop及以上系统中测试的APK包,而无需再耗费大量时间进行dex合并进程。 

    Java代码 
    1. android {  
    2.     productFlavors   
    3.         dev {  
    4.             minSdkVersion 21  
    5.         }  
    6.         prod {  
    7.             // The actual minSdkVersion for the application.  
    8.             minSdkVersion 14  
    9.         }  
    10.     }  


    直接将单元测试结果输出到console中 

    使用这个小技巧,我们可以实时看到安卓单元测试的记录结果。 

    Java代码 
    1. android {  
    2.   ...  
    3.   
    4.   testOptions.unitTests.all {  
    5.     testLogging {  
    6.       events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'  
    7.       outputs.upToDateWhen { false }  
    8.       showStandardStreams = true  
    9.     }  
    10.   }  
    11. }  


    现在运行测试时,输出结果如下: 


     


    Gradle,tell me I’m pretty 

    全部放在一起的话,顺序如下: 

    Java代码 
      1. android {  
      2.     ...  
      3.     buildTypes {  
      4.         def BOOLEAN = "boolean"  
      5.         def TRUE = "true"  
      6.         def FALSE = "false"  
      7.         def LOG_HTTP_REQUESTS = "LOG_HTTP_REQUESTS"  
      8.         def REPORT_CRASHES = "REPORT_CRASHES"  
      9.         def DEBUG_IMAGES = "DEBUG_IMAGES"  
      10.   
      11.         debug {  
      12.             ...  
      13.             buildConfigField BOOLEAN, LOG_HTTP_REQUESTS, TRUE  
      14.             buildConfigField BOOLEAN, REPORT_CRASHES, FALSE  
      15.             buildConfigField BOOLEAN, DEBUG_IMAGES, TRUE  
      16.         }  
      17.   
      18.         release {  
      19.             ...  
      20.             buildConfigField BOOLEAN, LOG_HTTP_REQUESTS, FALSE  
      21.             buildConfigField BOOLEAN, REPORT_CRASHES, TRUE  
      22.             buildConfigField BOOLEAN, DEBUG_IMAGES, FALSE  
      23.         }  
      24.     }  
      25. }  

    ============参考下就行啦============

  • 相关阅读:
    centos7安装doxygen
    mysql和mariadb支持insert delayed的问题
    Ubuntu用android-ndk-r15c编译boost_1_65_1
    记不住的Android活动的生命周期
    SpringBoot——经典的Hello World【二】
    SpringBoot——报错总结
    SpringBoot——SpringBoot学习记录【一】
    Nginx——配置文件服务下载
    CRAP-API——如何在Linux服务器部署CRAP-API教程
    Linux—— 报错汇总
  • 原文地址:https://www.cnblogs.com/xm1-ybtk/p/5099790.html
Copyright © 2020-2023  润新知