为什么 gradlew assembleDebug 没有 运行 jetifier,而 react-native 运行-android 运行 jetifier?

Why gradlew assembleDebug doesn't run jetifier, while react-native run-android run jetifier?

我在 gradle.properties 上设置了 android.useAndroidX = trueandroid.enableJetifier = true。但是当我 运行 react-native run-android 我看到:

info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 1902 file(s) to forward-jetify. Using 4 workers...

但是当我将目录更改为android 目录和运行 ./gradlew assembleDebug 时,我没有看到这样的东西。因此,我的构建在导入 android.support.* 库的任何地方都中断了。

> Task :react-native-app-auth:compileDebugJavaWithJavac FAILED
.../node_modules/react-native-app-auth/android/src/main/java/com/rnappauth/
RNAppAuthModule.java:10: error: package android.support.annotation does not exist
import android.support.annotation.Nullable;
                                 ^
.../node_modules/react-native-app-auth/android/src/main/java/com/rnappauth/RNAppAuthModule.java:11: error: cannot find symbol
import android.support.customtabs.CustomTabsCallback;
                                 ^
  symbol:   class CustomTabsCallback
  location: package android.support.customtabs
.../node_modules/react-native-app-auth/android/src/main/java/com/rnappauth/RNAppAuthModule.java:12: error: cannot find symbol
import android.support.customtabs.CustomTabsClient;
                                 ^
  symbol:   class CustomTabsClient
  location: package android.support.customtabs

(25 more errors)

为什么会这样?我怎样才能解决这个问题?有没有办法从外部强制 gradlew 到 运行 jetifier?

我找到了答案。为了让您的 gradle 构建包含库的 jetifier-ed 代码,步骤很简单。

  1. 运行react-native run-android先。这将对库进行 jetifier 处理并将它们放入构建文件夹中。
  2. 运行./gradlew assembleDebug。这会将构建文件夹中的 jetifier-ed 代码抓取到 APK 中,而不会再抱怨了。

我的情况是,在克隆项目之后,我 运行 ./gradlew assembleDebug 之前 运行 react-native run-android 。删除 android 文件夹中的构建文件夹也会导致同样的情况。

你可以运行

npx jetify

在组装调试之前