Jetifier 工具是个第三方开源小工具,GitHub:https://github.com/mikehardy/jetifier
独立的 Jetifier 工具可将依赖于支持库的库迁移为依赖于等效的 AndroidX 软件包。该工具可让您直接迁移单个库,而无需使用 Android Studio 附带的 Android Gradle 插件。注意:在开始迁移之前,您应更新库以使用支持库的 28.0.0 版。
安装 jetifier
要安装 Jetifier,请 下载 zip 文件 并将其解压缩。您的设备必须安装有 Java 1.8。
用法
要处理库,请传递当前库的路径以及该工具应创建的输出文件的路径。Jetifier 支持 JAR、AAR 和 ZIP 文件,包括嵌套归档。
./jetifier-standalone -i <source-library> -o <output-library>
选项
选项 | 是否必需? | 说明 |
---|---|---|
-i, --input <path> | 是 | 输入库(JAR、AAR 或 ZIP)的路径 |
-o, --output <path> | 是 | 输出文件的路径。如果该文件已存在,jetifier 会覆盖它。 |
-c, --config <path> | 否 | 可选自定义配置文件的路径。 |
-l, --log <level> | 否 | 日志记录级别。允许的值有:错误警告信息详细如果未指定,则默认为“警告”。 |
-r | 否 | 以反向模式运行(“de-jetification”)。 |
示例
以下示例会对库 libraryToProcess.aar
(在当前目录中)运行该实用程序,并将输出写入同一目录中的 result.aar
:
./jetifier-standalone -i libraryToProcess.aar -o result.aar
使用备注
Jetifier 会迁移指向 android.support.*
软件包的 Java、XML、POM 和 ProGuard 引用,更改它们以使其指向相应的 androidx.*
软件包。
由于 android.support.*
的 ProGuard 通配符并不总是直接映射到 androidx.*
软件包,因此 Jetifier 会生成所有符合条件的替代项。
如果 android.support.*
软件包中的某个类型不是来自任何支持库工件,那么只要该类型存在相关的映射,Jetifier 就会迁移该类型。但是,不能保证此迁移一定可行,因为可能没有足够通用的映射规则来涵盖所有自定义类型。
高级用法
Jetifier 实用程序支持一些高级用例。
反向模式
如果您传递 -r
标记,该实用程序会以反向模式运行。在此模式下,该实用程序会将 AndroidX API 转换为支持库的等效项,而不是相反的操作。反向模式很有用,例如在以下情况下:您正在开发使用 AndroidX API 的库,但还需要分发使用支持库的版本。
示例
以下示例会以反向模式对库 myAndroidXLib.aar
(在当前目录中)运行该实用程序,并将输出写入同一目录中的 supportLibVersion.aar
:
./jetifier-standalone -r -i myAndroidXLib.aar -o supportLibVersion.aar
自定义配置文件
Jetifier 工具使用配置文件将支持库类映射到其对应的 AndroidX 等效项。如有必要,您可以创建一个自定义配置文件来修改此映射。您甚至可以向此映射添加实际并未包含在支持库中的新类;例如,您可以修改此映射,以使用编写为使用 AndroidX 的继任类来替换您自己的某个类。
要使用自定义配置文件,请首先从该实用程序的 jetifier-core-*.jar
文件中提取 default.generated.config
文件,然后保存该文件。对配置文件的副本进行必要的修改,然后使用 -c
标记将该文件传递给实用程序。例如:
./jetifier-standalone -i libraryToProcess.aar -o result.aar -c myCustomMapping.config
React Native 使用 Jetifier 解决打包编译出现 Android X 问题
Android X 的问题是啥?这里我就不科普了,直接上报错(这里只是举个例子可能不止 react-native-picker 这个包有这个问题):
> Task :react-native-picker:compileReleaseJavaWithJavac FAILED
/data/app/caohan/node_modules/react-native-picker/android/src/main/java/com/beefe/picker/PickerViewModule.java:9: 错误: 程序包android.support.annotation不存在
import android.support.annotation.Nullable;
^
/data/app/caohan/node_modules/react-native-picker/android/src/main/java/com/beefe/picker/PickerViewModule.java:533: 错误: 找不到符号
@Nullable WritableMap params) {
^
符号: 类 Nullable
位置: 类 PickerViewModule
注: /data/app/caohan/node_modules/react-native-picker/android/src/main/java/com/beefe/picker/PickerViewModule.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
2 个错误
FAILURE: Build failed with an exception.
这个东西其实 React Native 团队在 react-native run-android 的时候就调用了 Jetifier 解决打包编译出现 Android X 问题
Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 3188 file(s) to forward-jetify. Using 12 workers...
info JS server already running.
info Installing the app...
这个就是在调用 Jetifier ,默认的 react native 项目都会自带这个工具,如果项目里没有的话可以用 yarn 或者 npm 安装一下
yarn add jetifier
# or npm install
npm install jetifier
怎么使用呢?在项目目录下执行下面命令就ok啦!
./node_modules/jetifier/bin/jetify { stdio: 'inherit' }
重新打包就会解决 Android x 的问题了…
全部评论:1条