引入AppCompatTextView导致Android应用崩溃的问题求助
Hey,我之前也碰到过一模一样的坑!咱们一步步来排查解决这个AppCompatTextView崩溃的问题:
你提到要兼容API26以下实现文本自动缩放,用AppCompatTextView是完全正确的——因为原生TextView的autoSize系列属性是API26才原生支持的,v7/Appcompat库把这个能力下放到了更低版本。现在编译正常但运行崩溃,本质是运行时找不到AppCompatTextView的类,大概率是依赖配置、构建缓存或者布局写法的问题,和app.iml的配置关系不大(毕竟iml是IDE自动生成的,实际依赖以gradle为准)。
1. 先确认gradle依赖是否真的正确引入
别盯着app.iml看,直接看build.gradle(Module: app)里的依赖配置:- 如果是旧的Support Library体系,确保有v7库的依赖(版本建议不低于26,因为autoSize是从v26开始加入的):
implementation 'com.android.support:appcompat-v7:28.0.0' // 替换成你项目用的版本号 - 如果已经迁移到AndroidX,要换成AppCompat的AndroidX版本,依赖和控件类名都要改:
implementation 'androidx.appcompat:appcompat:1.6.1' // 用最新稳定版即可
改完记得点击Sync Now同步gradle。
- 如果是旧的Support Library体系,确保有v7库的依赖(版本建议不低于26,因为autoSize是从v26开始加入的):
2. 检查布局文件的控件写法是否正确
别写错全类名,还要确保autoSize属性用的是app:命名空间:
旧Support Library写法:<!-- 根节点一定要加app命名空间:xmlns:app="http://schemas.android.com/apk/res-auto" --> <android.support.v7.widget.AppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:autoSizeTextType="uniform" <!-- 核心属性,开启自动缩放 --> app:autoSizeMinTextSize="12sp" app:autoSizeMaxTextSize="32sp" app:autoSizeStepGranularity="2sp"/>AndroidX写法:
<androidx.appcompat.widget.AppCompatTextView ... app:autoSizeTextType="uniform"/>3. 清理构建缓存+重启IDE
有时候IDE的缓存会抽风,导致编译和运行时的类路径不一致:- 点击菜单栏的
Build -> Clean Project - 接着
Build -> Rebuild Project - 最后重启Android Studio,再重新运行项目
- 点击菜单栏的
4. 检查minSdkVersion是否达标
AppCompat的autoSize功能最低支持API14,所以确保build.gradle里的minSdkVersion >=14,如果设得太低可能会出现类加载问题。5. 排查混淆规则(如果开启了混淆)
如果你的项目开启了代码混淆,要在proguard-rules.pro里添加规则,避免AppCompatTextView被误删:// 旧Support Library -keep class android.support.v7.widget.AppCompatTextView { *; } // AndroidX版本 -keep class androidx.appcompat.widget.AppCompatTextView { *; }
如果以上步骤都没用,试试删除项目根目录下的.idea文件夹和app模块的app.iml文件,然后重新打开项目并同步gradle——IDE会自动生成全新的配置文件,很多奇怪的缓存问题都能这么解决。
内容的提问来源于stack exchange,提问作者Fat Monk

