当Jcenter宣布逐步停止服务时,许多Android开发者面临依赖库迁移的挑战。作为广泛使用的屏幕适配方案,AndroidAutoSize的迁移不仅涉及仓库地址变更,更需要解决AndroidX兼容性问题。本文将带你从零开始完成整个迁移过程,避开常见陷阱,确保项目平稳过渡。
2021年JFrog宣布Jcenter将逐步关闭,这对长期依赖该仓库的Android生态造成显著影响。AndroidAutoSize作为优秀的屏幕适配方案,其官方维护者JessYan早已将库迁移至JitPack。迁移前需要确认几个关键信息:
jcenter()声明提示:在开始迁移前,建议在版本控制系统中创建新分支,方便回滚。
迁移工作主要分为两个阶段:
JitPack作为轻量级Maven仓库,已经成为许多开源项目的首选托管平台。以下是完整的迁移步骤:
打开项目根目录下的build.gradle文件,在repositories块中添加JitPack仓库:
groovy复制allprojects {
repositories {
google()
mavenCentral()
maven { url "https://jitpack.io" } // 新增这行
// 移除或注释掉jcenter()
}
}
在app模块的build.gradle中,修改AutoSize的依赖声明:
groovy复制dependencies {
// 替换原来的implementation 'me.jessyan:autosize:1.2.1'
implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1'
}
执行Gradle同步后,可以通过以下命令检查依赖是否解析成功:
bash复制./gradlew :app:dependencies --configuration implementation
在输出中应该能看到类似这样的条目:
code复制+--- com.github.JessYanCoding:AndroidAutoSize:v1.2.1
迁移到JitPack后,在AndroidX项目中可能会遇到类找不到的错误,典型表现为:
code复制Rejecting re-init on previously-failed class java.lang.Class<me.jessyan.autosize.FragmentLifecycleCallbacksImpl>:
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/app/FragmentManager$FragmentLifecycleCallbacks;
在gradle.properties文件中添加以下配置:
code复制# 启用AndroidX支持
android.useAndroidX=true
# 自动转换第三方库的依赖到AndroidX
android.enableJetifier=true
有时其他依赖可能引入旧版支持库,导致冲突。使用以下命令检查依赖树:
bash复制./gradlew :app:dependencies
如果发现support库的引用,可以通过exclude排除:
groovy复制implementation('com.github.JessYanCoding:AndroidAutoSize:v1.2.1') {
exclude group: 'com.android.support'
}
完成基本迁移后,我们可以进一步优化AutoSize的使用体验。
在AndroidManifest.xml中配置设计尺寸:
xml复制<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
对于需要支持横竖屏切换的应用,可以这样配置:
java复制AutoSizeConfig.getInstance().setOnAdaptListener(new onAdaptListener() {
@Override
public void onAdaptBefore(Object target, Activity activity) {
int[] screenSize = ScreenUtils.getScreenSize(activity);
AutoSizeConfig.getInstance()
.setScreenWidth(screenSize[0])
.setScreenHeight(screenSize[1]);
if (activity.getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// 横屏设计尺寸
AutoSizeConfig.getInstance()
.setDesignWidthInDp(1280)
.setDesignHeightInDp(800);
} else {
// 竖屏设计尺寸
AutoSizeConfig.getInstance()
.setDesignWidthInDp(800)
.setDesignHeightInDp(1280);
}
}
});
某些页面可能需要禁用自动适配:
java复制// 在BaseActivity中配置
@Override
public boolean isBaseOnWidth() {
return false; // 按高度适配
}
// 或者在特定Activity中禁用适配
AutoSize.cancelAdapt(this);
迁移过程中可能会遇到各种问题,这里总结几个常见场景的解决方案。
如果出现类找不到错误,检查以下方面:
bash复制./gradlew clean assembleDebug
当发现布局没有正确适配时:
如果项目中同时使用了其他适配方案,如smallestWidth限定符,可能会产生冲突。建议:
java复制// 临时修改适配策略
AutoSizeConfig.getInstance()
.setExcludeFontScale(true)
.setBaseOnWidth(false);
迁移到JitPack后,我发现最大的优势是版本更新更加及时。有次项目中需要紧急修复一个横屏适配bug,维护者在JitPack上发布了热修复版本,我们只需简单修改版本号就解决了问题,这种响应速度在Jcenter时代是很难实现的。