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

时间:2019-09-17 06:53:33

标签: android react-native gradlew android-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...

但是当我将dir更改为android dir并运行./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?

2 个答案:

答案 0 :(得分:2)

我找到了答案。为了使gradle构建包括库的喷射代码,步骤很简单。

  1. 首先运行react-native run-android。这将对库进行过滤,并将它们放在build文件夹中。
  2. 运行./gradlew assembleDebug。这样会将您在build文件夹中由jetifier编辑的代码捕获到APK中,而不会再抱怨了。

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

答案 1 :(得分:0)

您可以运行

npx jetify

在组装调试之前