Android Studio 2.x升级到 Android St

2018-01-12  本文已影响426人  元亨利贞o

一. 最近将AndroidStudio2.x升级到了Android Studio3.x遇到了一系列的问题.

as 3.0开始支持lambda表达式了, 因此为了优化项目删除额外的retrolambda库, 需要从as2.x升级到as3.x

二. 先说下升级的步骤, 然后在说遇到的问题.

升级步骤:

  1. 更新gradle插件
  1. 升级输出文件(*.apk)名称相关配置
    AS2.x时配置如下:

     //设置apk文件的名称 (as2.x)
     applicationVariants.all { variant ->
         variant.outputs.each { output ->
             def apk = output.outputFile
             def newName = "VRVideo_" + variant.buildType.name + "_" + defaultConfig.versionName + "_" + defaultConfig.versionCode + ".apk";
             output.outputFile = new File(apk.parentFile, newName)
    
         }
     }
    

    AS3.x时配置如下:

     //设置apk文件的名称 (as3.x)
     applicationVariants.all { variant ->
         variant.outputs.all {
             outputFileName = "VRVideo_" + variant.buildType.name + "_" + defaultConfig.versionName + "_" + defaultConfig.versionCode + ".apk"
         }
     }
    
  2. 将build.gradle文件中的compile更新为api / implementation (下面会讲compile/api/implementation的区别)

  3. 更新android-apt插件

  1. EventBus配置升级
    使用gradle插件内置的annotationProcessor替代android-apt的apt配置, 如下:
  1. ButterKnife配置升级 (7.0.1 => 8.8.1)
#-keep class **$$ViewInjector { *; }  #butterknife6.x-生成的类
#-keep class **$$ViewBinder { *; }  #butterknife7.x生成的类
-keep class **_ViewBinding { *; } #butterknife8.x生成的类

三. 升级过程中遇到的问题

  1. apk文件名称相关配置升级 (如二所示)
  2. 注解解析器升级, 即将android-apt插件换成gradle插件中的annotationProccessor (gradle插件自2.2+开始支持内置的annotationProcessor配置)
  3. EventBus配置升级 (如二所示)
  4. ButterKnife配置升级 (如二所示)
  5. 安卓构建工具升级


    BC1D97FE-B8E5-4827-B7A7-4427273462F4.png

    从上图可获得两条信息:

因此, 你可以删掉buildToolsVersion 'x.x.x'这句配置 或 Build Tools的版本升级到26.0.2或更高版本

  1. compile => api, implementation, api和implementation的区别就如其词义所示: api即用于对外(当前module之外)提供接口, implementation就是用来实现当前module(定义的api)的. 这样解释有点抽象, 可能你并没听懂. 举个例子:
    你在你的Library Module中引用了一个第三方库(如fastjson), 你想其他人使用你的这个Library Module的时候也能直接使用这个第三方库, 这时你应该用 api 'com.xxx.xxx' (即将关键词api之后引用的library的api对外公开, 不仅可以在当前module中使用, 其他引用当前module的调用者也可以使用第三方库); 否则, 则用 implementation 'com.xxx.xxx'
    总结一下:
  1. Library Module中不能使用shrinker配置, 错误如下:

    EDAF6B81-4060-4532-B548-FB96869D89D0.png
    根据错误信息, 直接把Library Module中的build.gradle配置中的shrinkResources true删掉即可恢复正常
  2. ../res/values/styles_dialog.xml:5:5-15:13: AAPT: error: style attribute '@android:attr/windowFrame' not found.
    as3.x 使用aapt2来处理资源文件, 编译时会抛出上面错误. 暂时先禁用aapt2, 即在rootProject/gradle.properties文件中添加下列语句:
    android.enableAapt2=false

    如果要用aapt2呢?? ......

References:

http://blog.csdn.net/xx326664162/article/details/68490059
https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration.html

上一篇下一篇

猜你喜欢

热点阅读