反应原生构建错误:包android.support.annotation不存在

问题描述 投票:0回答:8

我必须完全重写这个问题。

我有一个 React Native Android 应用程序。当我用

apk
构建
./gradlew assembleRelease -x bundleReleaseJsAndAssets
文件时,一切顺利,但之后它完全停止编译。甚至
react-native run-android
也不再起作用了。

到目前为止我发现了什么: 首先,错误是这样的

Task :app:processDebugResources FAILED
resource android:attr/fontVariationSettings not found.
resource android:attr/ttcIndex not found.

如果我将这些行添加到

gradle.properties

android.useAndroidX=true
android.enableJetifier=true

错误发生变化。现在是这个

Task :@JWWon_react-native-universal-pedometer:compileDebugJavaWithJavac FAILED

error: package android.support.annotation does not exist
import android.support.annotation.Nullable;
                                 ^
cannot find symbol
  private void sendPedometerUpdateEvent(@Nullable WritableMap params) {
                                         ^
  symbol:   class Nullable
  location: class BMDPedometerModule

问题不在于图书馆。如果我将其从项目中删除,它就会开始抱怨另一个项目。为了让它编译,我必须删除 7 个库。一个例子:

Task :@react-native-community_netinfo:compileDebugJavaWithJavac FAILED
error: package android.support.v4.net does not exist
import android.support.v4.net.ConnectivityManagerCompat;
error: cannot find symbol
    promise.resolve(ConnectivityManagerCompat.isActiveNetworkMetered(getConnectivityManager()));
                    ^
  symbol:   variable ConnectivityManagerCompat
  location: class ConnectivityReceiver
2 errors

然后如果我删除另一个,就会发生这种情况:

Task :react-native-camera-kit:compileDebugJavaWithJavac FAILED
package android.support.annotation does not exist
import android.support.annotation.ColorInt;
                                 ^
package android.support.annotation does not exist
import android.support.annotation.IntRange;
                                 ^
...
92 errors

因此,如果我从项目中删除 7 个库,它就会编译。他们是:

react-native-camera-kit
@react-native-community_netinfo
react-native-push-notification
react-native-sensors
@JWWon_react-native-universal-pedometer
react-native-keep-awake
react-native-toast-native

没有它们,它可以完美编译。因此,有一个更大的问题无法让它发挥作用。 2天前,所有这些库都运行良好,没有任何问题。但现在有什么东西压垮了它。

android react-native
8个回答
71
投票

尝试使用喷射器

npm install --save-dev jetifier

或者使用yarn,但将其安装在项目本地,而不是全局

npx jetify


npx jetify -w=1
- 指定并行工作人员的数量

npx react-native run-android


38
投票

我实际上发生了非常类似的事情并且运行它有效

npx jetify

当我通过 CI 管道运行它时,它不起作用并且最终不得不添加

"scripts": {
 ...
    "postinstall": "jetify"
}

npm 在管道中运行 install 后,然后运行 jetify 来转换为 androidx 并覆盖所有需要转换的库。


13
投票

尝试使用 androidx

// build.gradle 
implementation "androidx.annotation:annotation:1.1.0"

// where use it
import androidx.annotation.Nullable;

更新:

如果其他库出错,也许你可以尝试jetifier, 我通过这个有用的问题知道了。

完整参考如下,希望有帮助:)

// android/build.gradle
ext {
    buildToolsVersion = "28.0.3"
    minSdkVersion = 24
    compileSdkVersion = 28
    targetSdkVersion = 28
    supportLibVersion = "1.0.0-beta01"
}

// app/build.gradle
dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "androidx.core:core:1.0.2"
    implementation "androidx.annotation:annotation:1.1.0"
    implementation "androidx.appcompat:appcompat:${rootProject.ext.supportLibVersion}"
    implementation "com.facebook.react:react-native:0.59.9"  // From node_modules
}

顺便说一句,我遇到这个问题(AndroidX)好几天了,最后通过更新解决了它

[email protected]
,使用最新的android设置和神奇的jetifier


8
投票
allprojects {
  repositories {
      bla bla bla...
  }
  subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "26.+"
            }
            if (details.requested.group == 'com.google.android.gms'
            && !details.requested.name.contains('multidex') && !details.requested.name.contains('play-services-stats')) {
                details.useVersion "12.+"
            }
            if (details.requested.group == 'com.google.android.gms'
            && !details.requested.name.contains('multidex') && details.requested.name.contains('play-services-stats')) {
                details.useVersion "+"
            }
         }
      }
   }
}

在build.gradle中添加子项目(android)

dependencies {
     ...bla bla bla

    implementation "com.google.android.gms:play-services-gcm:12.+"
}

在 build.gradle (android/app) 中添加实现“com.google.android.gms:play-services-gcm:12.+”

因此您无需迁移到 Androidx

编辑1:代码格式

编辑2:缺少括号


0
投票

//构建.gradle

实现“androidx.annotation:annotation:1.1.0”

//在哪里使用

导入 androidx.annotation.Nullable;

在所有出现错误的地方从 androidx 导入缺失的类。


0
投票

react-native 构建错误:- 包 android.support.annotation 不存在

转到终端并打开您的项目

第 1 步 - npm install jetifier

你可以使用纱线

步骤 2-npx jetify

第 3 步 - npx react-native run-android


-1
投票

添加

android.useAndroidX=true
android.enableJetifier=true

在 gradle.properties 中


-1
投票

好的。过去 4 天很痛苦,但现在我已经可以使用了。

我做了什么:

添加

android.useAndroidX=true
android.enableJetifier=true
到 gradle.properties

将sdk更改为28

compileSdkVersion 28
buildToolsVersion '28.0.3'

并删除了一个库

react-native-camera-kit
。至少现在一切都编译好了。我猜 Jetifier 不适用于这个库。现在我必须把它关掉。

© www.soinside.com 2019 - 2024. All rights reserved.