【问题标题】:Why gradlew assembleDebug doesn't run jetifier, while react-native run-android run jetifier?为什么gradlew assembleDebug不运行jetifier,而react-native run-android运行jetifier?
【发布时间】:2020-01-17 23:56:55
【问题描述】:

我在 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?

【问题讨论】:

    标签: android react-native gradlew android-jetifier


    【解决方案1】:

    你可以跑

    npx jetify

    组装前调试

    【讨论】:

    • 有趣。这个答案仍然让我受益匪浅,因为我现在使用脚本来运行构建 APK 所需的所有过程,包括 react-native run-android。现在我可以用较短的运行时间npx jetify 替换较长的运行时间react-native run-android。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我发现react-native run-android先运行转换,而android生成apk步骤不包括这一步。有没有其他可行的解决方案。比这个?
    • @heisenberg 首先运行react-native run-android,然后运行android generate apk,android generate apk 将自动包含构建文件夹中已有的内容,包括jetified 库。
    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2021-02-23
    • 2019-01-14
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多