1. 前言
AndroidX replaces the original support library APIs with packages in the androidx namespace. Only the package and Maven artifact names changed; class, method, and field names did not change.,Google不再对android support库进行维护,android support中的API由命名空间AndroidX下的软件包进行替换,即相应的包名和Maven工件名发生改变。
2. 迁移AndroidX
2.1 迁移之前的准备
原有项目的support库版本升级至28(Android 9),这也是support library的最后版本,SDK 28 和AndroidX 1.0 是等效的。This is because AndroidX artifacts with version 1.0.0 are binary equivalent to the Support Library 28.0.0 artifacts.,
compileSdkVersion 28
建议使用Android studio 3.2或更高版本,(当前最新版已经到了4.0)。
gradle-wrapper.properties中Gradle插件版本不低于4.6。
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
如果代码在版本控制器中,建议在单独的分支中迁移。
2.2 执行迁移
在gradle.properties文件中添加下列项。
# Android 插件会使用对应的 AndroidX 库而非支持库。 android.useAndroidX=true # Android 插件会通过重写现有第三方库的二进制文件,自动将这些库迁移为使用 AndroidX,但并不完全自动。 android.enableJetifier=true
如果是AS 3.2或更高版本,则提供了一键迁移,选择菜单Refactor-> Migrate to AndroidX,会提示备份当前工程,勾选Backup project as Zip file,可以自动帮你备份。
左下角提示,点击Do Refactor
3 迁移结果
在一键迁移之后,gradle文件中implementation的所有support库被androidx替换,比如
implementation 'com.android.support:appcompat-v7:28.0.0' 变为 implementation 'androidx.appcompat:appcompat:1.0.0'
相应类名也会发生改变
import android.support.v7.app.AppCompatActivity; 变为 import androidx.appcompat.app.AppCompatActivity;
所以,可以先看看上面两项结果,如果没有替换成功,可手动替换,相应替换可查阅官方提供的CSV格式的依赖库映射文件和类映射文件。
rebuild project,如果编译通过,那么恭喜你了,我反正是失败了。
4 迁移出错
4.1 可手动纠正的错
有的文件中没能替换掉,需要按照上述两项映射手动替换。
检查gradle中通过implementation引入的库,比如implementation androidx.recyclerview:recyclerview:1.0.0',则一键迁移后导入的类为import androidx.appcompat.widget.RecyclerView;,需要替换为import androidx.recyclerview.widget.RecyclerView;,猜测只是全局替换掉support字样。因为类似还有GridLayoutManager、FragmentTransaction;`等。
4.2 第三方库冲突
support库和androidx是不能共存的,
解决方法:
总之,就是多build,根据异常信息解决问题。
5 参考资料
AndroidX预览
官方迁移教程
谷歌开发者-是时候迁移至 AndroidX 了
到此这篇关于Android AndroidX的迁移的文章就介绍到这了,更多相关AndroidX迁移内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
(至少我可以只用名字,跳过时间戳……) 有更简单的方法吗?
应使用版本控制工具记录 schema.rb (或 structure.sql )的变化。 应使用 rake db:scheme:load 而不是 rake db:migrate 来初始化空数据库。 应在迁移文件中设置默认值,而不是在应用层面设置。 # 差——在应用中设置默认值 def amount self[:amount] or 0 end 虽然许多 Rails 开发者建议在 Rails 中
RSS 首先,安装 hexo-migrator-rss 插件。 $ npm install hexo-migrator-rss --save 插件安装完成后,执行下列命令,从 RSS 迁移所有文章。source 可以是文件路径或网址。 $ hexo migrate rss <source> Jekyll 把 _posts 文件夹内的所有文件复制到 source/_posts 文件夹,并在 _con
Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。
我不确定似乎是什么问题,但这种膝盖迁移失败了。尽管我是编写迁移的新手,但我坚信此迁移文件是正确的。生成的错误如下 代码如下。最初,这些迁移函数在单独的文件中,我认为它失败了,因为文件没有同步执行,这导致我编写了一个文件。我不确定这是否有帮助,但是当我删除包含外键引用(UserRoles、RolePer的、令牌)的表的代码时,其余的似乎都在工作。
我正在开发迁移应用程序 [删除向导 0.7.0]。要使用迁移生成数据库结构.xml,我正在为 Postgres 和 ORACLE 数据库运行数据库迁移命令。对于 Postgres,我成功地生成了数据库结构,但是当尝试 ORACLE 时,以下详细信息导致异常 对于这些预言机设置,我得到以下异常