Skip to content

云课堂Androidx适配指南

HWilliamgo edited this page Mar 15, 2021 · 7 revisions

目前云课堂 SDK 尚未做 Androidx 适配处理,但是已经有兼容处理方案了。开发者可以下载demo后按以下步骤执行,注意先把原始项目转换成 Androidx 的项目,运行正常后,再按集成文档进行模块集成。

1、AndroidStudio 自动转化

在 AndroidStudio 打开从 Github 下载的云课堂 Demo,将项目级别的 build.gradle 文件中的 compileSdkVersion 设置为 28。因为AndroidStudio的自动转化最低要求版本28。

ext {
    compileSdkVersion = 28
    minSdkVersion = 16
    targetSdkVersion = 28
		//...
}

依次打开 Refactor-Migrate to Androidx,AndroidStudio 会自动帮你转化为 Androidx 的工程。扫描之后会弹出 Refactoring Preview,点击 Do Refactor 就会开始自动转化。

2、修改依赖

点击一下小锤子,make project,会发现提示主要提示两个问题:

1程序包android.support.annotation不存在
2错误: 找不到符号
符号:    CheckResult
位置:  GlideOptions

这是因为原有的注解在Androidx中不再支持了,且云课堂 SDK 中引用的 Glide 4.7.1 不支持 Androidx的注解,所以我们要修改部分依赖。修改完成后编译运行即可。

//...polyvLiveCommonModul/build.gradle
dependencies {
    //...
	/////------改动-start--------
    //1、注释原来的Glide版本
    //api ("com.github.bumptech.glide:okhttp3-integration:4.7.1")
    //annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

    //2、添加Glide依赖4.10.0
    api 'com.github.bumptech.glide:glide:4.10.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
    ////------改动-end---------

    //glide
    api ("com.github.bumptech.glide:okhttp3-integration:4.7.1"){
//        exclude group:'com.github.bumptech.glide',module:'glide'
    }
}

3、可能出现的问题

一般情况下以上两步已经可以将demo转为Androidx的工程,正常运行到手机上了,只需要按照集成文档指引即可集成到项目中。但是由于AndroidStudio版本差异,导致可能转化过程中出现一下异常情况。以下为收集到的高频次异常。

3.1 Android 5.x 进入直播间崩溃,其他版本正常

该情况往往是由于Androidx库:"androidx.appcompat:appcompat:1.1.0" 的 bug,在部分 5.0 的手机中会提示以下错误,需要将该库升级为 1.2.0-alpha02 版本。

android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView
  ...
  Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003

3.2 转化后进入直播间就崩溃

部分AndroidStudio在转化完Androidx项目后,运行云课堂demo会崩溃报错:

java.lang.IllegalStateException: Fragment already added: PolyvLiveInfoFragment{a36637b (08e2d0f4-240d-4d48-9be5-824fe73c6de2) id=0x7f090092 android:switcher:2131296402:0}
        at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1379)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:399)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
				...

这个主要是因为AndroidStudio转化的处理不当造成的,他对某些控件在xml和java文件中转化的包名并不一致,导致了渲染失败造成的。以下是要修改的对照表:

出错的文件 出错的控件 应该修改的包名
polyv_fragment_groupchat.xml androidx.core.widget.SwipeRefreshLayout androidx.swiperefreshlayout.widget.SwipeRefreshLayout
polyv_chat_emo_list_layout.xml androidx.appcompat.widget.RecyclerView androidx.recyclerview.widget.RecyclerView
plv_window_point_reward.xml androidx.core.view.ViewPager androidx.viewpager.widget.ViewPager

更多可参考官方support库与Androidx库对照表