android开发导包升级到androidx踩坑记录【转载】
最近一直在做安卓开发,奈何手中的资料比较老,资料上的一些Import经常没有,十分让人头疼。
感谢简书上的【张晴天天天天天】做的整理。
在这里也记录一下备用。
升级Android Studio后,在 Refactor ---> Migrate to AndroidX 路径下可以将整个项目升级到AndroidX。

所以接下来的修改也是在自动升级后的手动修改。
文末参考文章是Google官方的说明,可以查看里面更详细的指引和说明Migrating to AndroidX。
本文目录:
1.手动配置gradle.properties
2.app/build.gradle修改
3.java文件修改
4.布局文件xml修改
5.部分view不可用修改
6.其他问题
7.gradle命令帮助查找问题
8.参考文章
1.手动配置gradle.properties
android.enableJetifier=true
android.useAndroidX=true
2.app/build.gradle修改
| 修改前android.support | 修改后androidx |
|---|---|
| compile | implementation |
| testCompile | testImplementation |
| debugCompile | debugImplementation |
| releaseCompile | releaseImplementation |
当然,这部分主要是因为gradle升级后提示需要的更新。
没写全,只写了主要的,Android Studio有提示,根据提示更新就行。
android{
//省略。。。。
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
3.java文件修改
这里主要指import的修改,Android Studio自动帮助项目升级成androidx时,很多控件的路径在androidx中都变更了,所以需要全局搜索一键替换。
全局替换: Edit ->Find -> Replace in path
列举了一些常用的:
| 修改前android.support | 修改后androidx |
|---|---|
| import androidx.appcompat.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; |
| import androidx.core.view.ViewPager; | import androidx.viewpager.widget.ViewPager; |
| import androidx.core.view.PagerAdapter; | import androidx.viewpager.widget.PagerAdapter; |
| import androidx.core.app.Fragment; | import androidx.fragment.app.Fragment; |
| import androidx.core.app.FragmentManager; | import androidx.fragment.app.FragmentManager; |
| import androidx.core.app.FragmentTransaction; | import androidx.fragment.app.FragmentTransaction; |
| import androidx.core.content.LocalBroadcastManager; | import androidx.localbroadcastmanager.content.LocalBroadcastManager; |
| import androidx.appcompat.widget.DefaultItemAnimator; | import androidx.recyclerview.widget.DefaultItemAnimator; |
| import androidx.appcompat.widget.LinearLayoutManager; | import androidx.recyclerview.widget.LinearLayoutManager; |
| import androidx.appcompat.widget.GridLayoutManager; | import androidx.recyclerview.widget.GridLayoutManager; |
| import androidx.appcompat.widget.StaggeredGridLayoutManager; | import androidx.recyclerview.widget.StaggeredGridLayoutManager; |
| import android.support.design.widget.CoordinatorLayout; | import androidx.coordinatorlayout.widget.CoordinatorLayout; |
| import android.support.design.widget.CoordinatorLayout; | import androidx.coordinatorlayout.widget.CoordinatorLayout; |
| import android.support.design.widget.TabLayout; | import com.google.android.material.tabs.TabLayout; |
| import android.support.design.widget.AppBarLayout; | import com.google.android.material.appbar.AppBarLayout |
当整个项目因为未生成R文件满江红的时候,全局搜索替换这些常用控件会比较方便。
4.布局文件xml修改
在3.java文件修改中罗列了一些控件,同样也是全局搜索把这些对应的控件修改成androidx的就好。
列举几个:
| 修改前android.support | 修改后androidx |
|---|---|
| <android.support.v4.widget.NestedScrollView/> | <androidx.core.widget.NestedScrollView/> |
| <android.support.v4.widget.Space/> | <Space/> |
| <android.support.v7.widget.AppCompatTextView/> | <TextView/> |
| <androidx.appcompat.widget.CardView/> | <androidx.cardview.widget.CardView/> |
注意!!!
不管是java还是xml也好,在Android Studio全局搜索的情况下还是有可能搜漏,所以可能还是需要挨个文件查看替换。
5.部分view不可用修改
之前手动拷贝了support包中的TabItem(TabLayout需要使用的一个类)出来使用,在升级到androidx后发现无法使用了。
support中的代码:
public TabItem(Context context, AttributeSet attrs) {
super(context, attrs);
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
android.support.design.R.styleable.TabItem);
mText = a.getText(android.support.design.R.styleable.TabItem_android_text);
mIcon = a.getDrawable(android.support.design.R.styleable.TabItem_android_icon);
mCustomLayout = a.getResourceId(android.support.design.R.styleable.TabItem_android_layout, 0);
a.recycle();
}
a.getText()、a.getDrawable()、a.getResourceId()都报错,提示TintTypedArray.getText()或TintTypedArray.getDrawable()或TintTypedArray.getResourceId()只能在同一个library group(groupId=androidx.appcompat)中被调用,
从TintTypedArray的源码可知,是在源码中做了限制的原因:
@RestrictTo(LIBRARY_GROUP)
public class TintTypedArray {}
6.其他问题
app module所依赖的一些library我也升级到了androidx,在将library中的build.gradle里的compile修改成implementation的时候注意,如果这里依赖的对象需要全局使用的话,就要使用api关键字了。
比如:
修改前:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
修改后:
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
}
7.gradle命令帮助查找问题
在我一次又一次编译项目时,始终找不到是java文件或者xml文件哪里出错了,logcat、message也不报错,这种时候是最愁的。
直到我找到了大杀器:gradle命令
在terminal本项目路径下使用下面这条命令来编译项目:
./gradlew compileDebugJavaWithJavac
作者:张晴天天天天天
链接:https://www.jianshu.com/p/b0800f590e6e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
android开发导包升级到androidx踩坑记录【转载】的更多相关文章
- 腾讯优测-优社区干货精选 | android开发在路上:少去踩坑,多走捷径(下)
文/腾讯公司 陈江峰 优测小优有话说: android开发的坑自然是不少,不想掉坑快来优测优社区~ 6.Android APP开发中其它需要提醒的问题 android4.4在UI线程无法进行网络操作. ...
- Android开发在路上:少去踩坑,多走捷径
转自:http://djt.qq.com/article/view/1193 最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1.目前, ...
- Android开发在路上:少去踩坑,多走捷径(转)
最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1. 目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2. 目前, ...
- 【转】Android开发在路上:少去踩坑,多走捷径
本文是我订阅"腾讯大讲堂"公众帐号时,他们推送的一篇文章,但在腾讯大讲堂官网上我并没有找到这篇文章,不过其它专门"爬"公众号文章的网站倒是有.我觉得写的很不错. ...
- SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制
SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制. 升级前 #文件上传配置 ...
- manjaro xfce 18.0 踩坑记录
manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...
- Spark Ignite踩坑记录
Ignite spark 踩坑记录 简述 ignite访问数据有两种模式: Thin Jdbc模式: Jdbc 模式和Ignite client模式: shell客户端输出问题,不能输出全列: 针对上 ...
- IDFA踩坑记录
IDFA踩坑记录: 1.iOS10.0 以下,即使打开“限制广告跟踪”,依然可以读取idfa: 2.打开“限制广告跟踪”,然后再关闭“限制广告跟踪”,idfa会改变: 3.越狱机器安装开发证书打的包, ...
- python发布包到pypi的踩坑记录
前言 突然想玩玩python了^_^ 这篇博文记录了我打算发布包到pypi的踩坑经历.python更新太快了,甚至连这种发布上传机制都在不断的更新,这导致网上的一些关于python发布上传到pypi的 ...
随机推荐
- python 不可变类型
不可变类型有:字符串,元祖,数字 可变类型:列表,字典 字典中,可变类型不能为key值 #在函数中 可变类型,为全局变量时,会变化 不可变类型,为全局变量时,不会变化
- es 迁移数据, 重建索引
原索引 PUT my_index { "mappings": { "_doc": { "properties": { "creat ...
- nginx优化:配置gzip压缩页面提高访问速度(nginx1.18.0)
一,为什么nginx要使用gzip 1,压缩的作用: 页面使用gzip压缩之后, 页面大小可以压缩到原来的1/7左右, 传输速度和页面打开时间都可以大幅度提高, 有利于用户访问页面体验的提升 2,Ng ...
- buuctf-misc-[BJDCTF 2nd]圣火昭昭-y1ng 1
开局一张图片,flag全靠猜,那这个是不是和outguess工具有关呢?于是我们显示查看了图片的详细信息 看到是新佛曰,于是我们用新佛曰论禅解密:http://hi.pcmoe.net/buddha. ...
- SpringCloud 与 SpringBoot版本问题
如果SpringBoot版本与SpringCloud版本不一致,SpringBoot应用启动会报错: 解决方案: 版本对应关系可以在 https://start.spring.io/info 上查看: ...
- java 内存可见性
java线程 -> 线程工作内存 -> 主物理内存 线程工作内存的原理是栈内是连续的小空间,寻址速度比堆快得多,将变量拷贝到栈内生成副本再操作 什么是重排序 代码指令可能并不是严格按照代码 ...
- Java nio Client端简单示例
java nio是一种基于Channel.Selector.Buffer的技术,它是一种非阻塞的IO实现方式 以下Client端示例 public class ClientNio { public s ...
- kettle插入更新流程
kettle转换步骤工作组件 这里有四个类构成了这个kettle 步骤/节点,每一个类都有其特定的目的及所扮演的角色. TemplateStep: 步骤类实现了StepInteface接口,在转换运 ...
- Ubuntu下创建apt源
1. 下载所需安装文件 sudo apt-get install soft name 安装并保存安装文件 或者 sudo apt-get source soft name 只下载安装文件 ...
- js——事件循环
JS-事件循环 js运行的环境称之为宿主环境. 执行栈 :call stack ,一个数据结构,用于存放各种函数的执行环境,每一个函数执行之前他的相关信息会加入到执行栈中,函数调用之前,创建执行环境, ...