详解Android Studio 3.0的新特性与适配

  

<强>简介

  

Android工作室升级到3.0后,有不少的改动和新特性,先贴出官方的迁移说明。

  

本文会持续收集与总结本人在使用Android Studio 3.0进行开发的过程中所遇到的问题。

  

<>强版本配置

  

<强> Gradle版本

  
      <李> Android Studio 3.0需要的Gradle版本至少为4.1。   <李>如果是使用gradle包装,则工程根目录/gradle/包装/gradle-wrapper.properties中的distributionUrl字段为https \://services.gradle.org/distributions/gradle - 4.1 all.zip。   
  

<强> Android Gradle插件版本

  

Android Studio 3.0需要安卓Gradle插件版本为3.0.0。

  

Android Studio 3.0默认使用谷歌的Maven存储库来下载Android支持库,所以在脚本中要使用谷歌()来加入谷歌仓库。

  

工程根目录/build.gradle的相关配置如下。

        buildscript {   存储库{   谷歌()   }   依赖关系{   类路径“com.android.tools.build: gradle: 3.0.0”   }   }   之前      

<强>使用annotationProcessor

  

从Android Studio 3.0开始,使用annotationProcessor代替恰当的。不可再使用,否则会编译报错。
  

  

错误:android-apt插件不兼容Android Gradle插件只请使用“annotationProcessor”配置。
  

  

比如在Android Studio 3.0之前在应用模块导入ButterKnife 8.4.0的gradle配置如下。
  

        buildscript {   依赖关系{   类路径“com.neenbedankt.gradle.plugins: android-apt: 1.8”   }   }            应用插件:“com.neenbedankt.android-apt”      依赖关系{   编译的com.jakewharton: butterknife: 8.4.0   恰当的“com.jakewharton: butterknife-compiler: 8.4.0”   }   之前      

而工作室在Android 3.0中,使用annotationProcessor代替贴切,不用再导入android-apt插件。
  

        依赖关系{   编译的com.jakewharton: butterknife: 8.4.0   annotationProcessor com.jakewharton: butterknife-compiler: 8.4.0   }      

<>强修改apk名称

  

常用的修改输出的apk文件的名称的脚本如下。
  

        def apkBaseName () {//先查找project.ext.apkName变量,若无则使用项目名   如果(project.hasProperty (“apkName”)) {   返回project.apkName   其他}{   返回project.name   }   }      def buildTime () {   返回新的日期().format(“名称”)   }      def delUnderline (String str) {   def结果=str.startsWith (“_”) & # 63;str.substring (1): str   返回result.endsWith (“_”) & # 63;结果。substring (0, result.length() - 1):结果   }      android.applicationVariants。所有{变体→//ApplicationVariant   variant.outputs。每个{输出→//BaseVariantOutput   def文件=output.outputFile   如果(文件!=零,,file.name.endsWith (. apk)) {   def flavorName=delUnderline (variant.flavorName)   def buildTypeName=delUnderline (variant.buildType.name)   def apkFile=新文件(文件。父:“$ {apkBaseName ()} _”+   “$ {buildTypeName。空& # 63;”“:buildTypeName +}”+“_”   “$ {flavorName。空& # 63;”“:flavorName +}”+“_”   “v ${变体。versionName} _”+   " $ {buildTime ()} . apk”)   输出。outputFile=apkFile   }   }   }      之前      

在Android Studio 3.0中执行此脚本会报错如下,原因是ApkVariantOutputImpl的outputFile属性改为只读。
  

  

不能设置只读属性的值的outputFile ApkVariantOutputImpl_Decorated {apkData=https://www.yisu.com/zixun/Main {type=主要fullName=调试、过滤器=[]}}com.android.build.gradle.internal.api.ApkVariantOutputImpl型
  

  

不再设置outputFile属性,而是设置outputFileName。同时把每()改为()。
  

        android.applicationVariants。所有{变体→//ApplicationVariant   variant.outputs。所有{   如果(outputFileName.endsWith (. apk)) {   def flavorName=delUnderline (variant.flavorName)   def buildTypeName=delUnderline (variant.buildType.name)   outputFileName="文件名"   }   }   }   之前      

<强> AAPT2

  

为了改进增量资源处理,Android Gradle插件3.0默认开启AAPT2。

  

在旧项目中开启AAPT2,有时候会报的错,如:

详解Android Studio 3.0的新特性与适配