AndroidX的迁移

作者: JairusTse | 来源:发表于2019-05-08 12:32 被阅读11次

Android 支持库允许开发人员在旧版本的 Android 上支持新的 OS 特性,我们常用的 support v4、v7就是支持库,Google 2018 IO 大会推出了 Android 新的扩展库 AndroidX,用于替换原来的 Android 支持库。

不知道大家都迁移到AndroidX了没有,我有个开发Android项目的基础框架,里面集成了常用的第三方库和工具类,方便快速开发新项目。最近也是迁移到了 AndroidX,下面记录迁移的过程和遇到的一些问题。

  • 升级Android Studio,升级后的版本是3.3.2

  • 在 gradle.properties 里面加上

android.useAndroidX=true
android.enableJetifier=true

其中,android.useAndroidX=true 表示当前项目启用 AndroidX,android.enableJetifier=true 表示将依赖包也迁移到 AndroidX。

然后出现了一个报错信息:

Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.

compile 已经被弃用,把 build.gradle 里面的 compile 全部改成 implementation

  • 执行 Refactor > Migrate to AndroidX


    WechatIMG284.png

Migrate 失败,出现了下面的问题:


WechatIMG285.png

compileSdkVersion 原来是27,改成28:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.baseproject"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
...
}

再一次 Migrate,还是失败:


WechatIMG286.png

Gradle version 改成 4.10.1(原来4.1),Android Plugin Version 改成 3.3.2(原来3.0.1):

WechatIMG287.png
  • 再次 Migrate to AndroidX 成功后,出现很多编译错误,一个个文件处理,删除后重新import:
//旧的
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import androidx.core.app.Fragment;
import androidx.core.app.FragmentManager;
import androidx.core.app.FragmentTransaction;
import androidx.core.view.PagerAdapter;
import androidx.core.view.ViewPager;
import android.support.multidex.MultiDex;
import android.support.multidex.MultiDexApplication;

//新的
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import androidx.multidex.MultiDex;
import androidx.multidex.MultiDexApplication;
  • 运行的时候出现下面的问题:
FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration ':app:debugAnnotationProcessorClasspath'.
> Failed to transform file 'butterknife-compiler-8.8.1.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
   > Failed to transform '/Users/xieyue/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-compiler/8.8.1/b2f4505a1babb7b7c11abbbf8ea4c90b18c3aeac/butterknife-compiler-8.8.1.jar' using Jetifier. Reason: The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.. (Run with --stacktrace for more details.)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 5s
6 actionable tasks: 1 executed, 5 up-to-date

参考 butterknife 官网的处理办法:

android {
  ...
  // Butterknife requires Java 8.
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  implementation 'com.jakewharton:butterknife:10.1.0'
  annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
}

然后就可以正常编译和运行了。

大概的迁移流程就是这样,每个项目迁移时遇到的问题可能都不一样,大家遇到问题多上网找找办法,方法总比问题多。也欢迎大家关注我的公众号:JairusTse的日常。

最后,附上项目的码云地址:https://gitee.com/jairustes/project_framework

相关文章

  • 是时候迁移至androidX--Google官方视频笔记

    视频连接:迁移AndroidX 1.为什么需要迁移到AndroidX Support Library 28.0是最...

  • AndroidX迁移小记

    AndroidX迁移小记 为什么要迁移AndroidX?因为Android 现有的软件包,如Android支持库,...

  • 笔记

    Android Studio升级到3.4后的两个小坑 AndroidX迁移 1.AndroidX迁移 2....

  • AndroidX - Program type already

    最近在将项目迁移到Androidx的时候,通过Refactor - > Migrate to AndroidX,然...

  • AndroidX迁移和方法

    迁移到 AndroidX AndroidX 将原始支持库 API 替换为 androidx 命名空间中的软件包。只...

  • AndroidX 迁移

    title: androidx迁移date: 2019-10-15 11:49:20tags: Androidx ...

  • 迁移AndroidX

    迁移AndroidX https://developer.android.google.cn/jetpack/an...

  • 迁移AndroidX!!!

    参考链接本次迁移主要参考上面谷歌官方公众号文章,迁移背景建议点进文章进行查看,本文主要提及一些迁移过程和其中遇到的...

  • 迁移AndroidX

    1. 前言 AndroidX replaces the original support library APIs...

  • AndroidX迁移

    什么是 AndroidX? Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,...

网友评论

    本文标题:AndroidX的迁移

    本文链接:https://www.haomeiwen.com/subject/ercmoqtx.html