Android开发遇见更好的自己Android开发经验谈

AndroidX的迁移

2019-05-08  本文已影响11人  JairusTse

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

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

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

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
//旧的
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

上一篇 下一篇

猜你喜欢

热点阅读