React-native-onesignal: 在任何 Android 上使用 RN0.60 崩溃

创建于 2019-09-23  ·  43评论  ·  资料来源: OneSignal/react-native-onesignal

1. 如果您不填写以下信息,我们可能会在不进行调查的情况下关闭您的问题 2. 搜索现有问题以获得答案:https://goo.gl/pspQNY 3. 请参阅我们的常见问题文档:https://goo .gl/BDcfZZ 4. 查看我们的贡献指南:https://goo.gl/h19DnX

描述:

(你的描述在这里)

环境

System:
    OS: macOS 10.14.6
    CPU: (6) x64 Intel(R) Core(TM) i5-8500B CPU @ 3.00GHz
    Memory: 6.63 GB / 32.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 10.16.1 - ~/.nvm/versions/node/v10.16.1/bin/node
    Yarn: 1.17.3 - /usr/local/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v10.16.1/bin/npm
  SDKs:
    iOS SDK:
      Platforms: iOS 13.0, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0
    Android SDK:
      API Levels: 23, 25, 27, 28, 29
      Build Tools: 25.0.2, 25.0.3, 28.0.3, 29.0.1, 29.0.2
      System Images: android-28 | Google APIs Intel x86 Atom, android-29 | Google APIs Intel x86 Atom
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.5791312
    Xcode: 11.0/11A419c - /usr/bin/xcodebuild
  npmPackages:
    react: 16.8.6 => 16.8.6
    react-native: 0.60.5 => 0.60.5
[email protected]

在 Android 应用程序启动时,我的应用程序崩溃,没有任何消息或窗口。

adb logcat

09-23 17:06:37.900 8388 8388 D AndroidRuntime:关闭虚拟机
09-23 17:06:37.901 8388 8388 E AndroidRuntime:致命异常:主要
09-23 17:06:37.901 8388 8388 E AndroidRuntime:进程:com.macroactive,PID:8388
09-23 17:06:37.901 8388 8388 E AndroidRuntime:java.lang.NoClassDefFoundError:解析失败:Lcom/google/android/gms/common/internal/zzbq;
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 com.google.firebase.provider.FirebaseInitProvider.attachInfo(来源不明)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.app.ActivityThread.installProvider(ActivityThread.java:5153)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.app.ActivityThread.-wrap1(ActivityThread.java)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.os.Handler.dispatchMessage(Handler.java:102)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.os.Looper.loop(Looper.java:148)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 android.app.ActivityThread.main(ActivityThread.java:5417)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.reflect.Method.invoke(本机方法)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:引起:java.lang.ClassNotFoundException:在路径上找不到类“com.google.android.gms.common.internal.zzbq”:DexPathList[[zip file] "/data/app/com.macroactive-2/base.apk"],nativeLibraryDirectories=[/data/app/com.macroactive-2/lib/arm, /data/app/com.macroactive-2/base.apk !/lib/armeabi-v7a, /vendor/lib, /system/lib]]
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.ClassLoader.loadClass(ClassLoader.java:511)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.ClassLoader.loadClass(ClassLoader.java:469)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:... 12 更多
09-23 17:06:37.901 8388 8388 E AndroidRuntime:禁止:java.lang.ClassNotFoundException:com.google.android.gms.common.internal.zzbq
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.Class.classForName(本地方法)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.BootClassLoader.findClass(ClassLoader.java:781)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:在 java.lang.ClassLoader.loadClass(ClassLoader.java:504)
09-23 17:06:37.901 8388 8388 E AndroidRuntime:... 13 更多
09-23 17:06:37.901 8388 8388 E AndroidRuntime:引起:java.lang.NoClassDefFoundError:使用引导类加载器找不到类; 没有可用的堆栈跟踪

无法在新的应用程序上重现它,所以它可能与任何库有关。 发现“com/google/android/gms/common/internal/zzbq”存在一些问题,但找不到任何有用的信息。
告诉我从哪里开始?

Help Wanted

最有用的评论

使用[email protected]在 react-native 0.60.5 中出现同样的错误

所有43条评论

同样,我的应用程序也因在 android 上获取通知而崩溃。 我在 mi note 4(android 7.0,RN 0.60.3,react-native-onesignal 3.3.3)上进行了测试。

@SAHITYASAI你能显示adb logcat吗?

Screenshot_2019-09-22-17-55-21-844_com miui bugreport
这是我在应用程序崩溃时遇到的运行时错误。

使用[email protected]在 react-native 0.60.5 中出现同样的错误

您能否确保已将onesignal-gradle-plugin到步骤 1.1 中注明的app/build.gradle的顶部?
https://documentation.onesignal.com/docs/android-sdk-setup#section -1-gradle-setup

缺少它或将其添加到错误的build.gradle是此运行时错误的最常见问题。

我的app/build.gradle

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

apply plugin: "com.android.application"

import com.android.build.OutputFile

btw,我以前只用过

apply plugin: "com.onesignal.androidsdk.onesignal-gradle-plugin"

对于 react-native 0.59 & react-native-onesignal: 3.2.12

我按照安装指南中的描述添加了所有内容。 但是行 apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin' 导致我的应用程序构建失败并出现此错误

  • 出了什么问题:配置根项目“”时出现问题。 >无法获得类型为 org.gradle.api.Project 的根项目 '' 的未知属性 'android'。

所以我评论了这一行,因为我在谷歌上找不到任何解决方案。
有人也可以给我任何关于如何使用 onesignal REST API 发送预定通知的示例代码。 提前致谢。

您能否确保已将onesignal-gradle-plugin到步骤 1.1 中注明的app/build.gradle的顶部?
https://documentation.onesignal.com/docs/android-sdk-setup#section -1-gradle-setup

缺少它或将其添加到错误的build.gradle是此运行时错误的最常见问题。

是添加并发生相同的错误

我的app/build.gradle

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

apply plugin: "com.android.application"

import com.android.build.OutputFile

我看到的方式! 你做错了! 这不是 app/build.gradle 文件的全部,apply 插件只在那里,其余的类路径,maven url 和 gradle 插件 repo url 进入项目 build.gradle

@indapublic我刚刚解决了它! 我有同样的错误! 谢谢你张贴这个。! 如果您还在寻找,我愿意帮助您联系我!

你好,
请升级到最新版本的插件 (3.4.1) 并重试。

@SAHITYASAI看看这里

@indapublic我刚刚解决了它! 我有同样的错误! 谢谢你张贴这个。! 如果您还在寻找,我愿意帮助您联系我!

谢谢,解决了!!

在项目文件夹中“app/build.gradle”在文件顶部添加了这个。

构建脚本{
存储库{
maven { url ' https://plugins.gradle.org/m2/ ' } // Gradle 插件门户
}
依赖{
类路径 'gradle.plugin.com. onesignal:onesignal-gradle-plugin :[0.12.1, 0.99.99]'
}
}

应用插件:'com.onesignal.androidsdk.onesignal-gradle-plugin'

应用插件:“com.android.application”

导入 com.android.build.OutputFile

有用!

很高兴听到!

@indapublic我刚刚解决了它! 我有同样的错误! 谢谢你张贴这个。! 如果您还在寻找,我愿意帮助您联系我!

给我看看你的build.gradle

@indapublic我刚刚解决了它! 我有同样的错误! 谢谢你张贴这个。! 如果您还在寻找,我愿意帮助您联系我!

给我看看你的build.gradle

构建脚本{
存储库{
maven { url ' https://plugins.gradle.org/m2/ ' } // Gradle 插件门户
}
依赖{
类路径 'gradle.plugin.com. onesignal:onesignal-gradle-plugin :[0.12.1, 0.99.99]'
}
}

应用插件:'com.onesignal.androidsdk.onesignal-gradle-plugin'

应用插件:“com.android.application”

导入 com.android.build.OutputFile

/**

  • react.gradle 文件为每个构建变体注册一个任务(例如 bundleDebugJsAndAssets
  • 和 bundleReleaseJsAndAssets)。
  • 这些基本上在 Android 构建期间使用正确的参数调用react-native bundle
  • 循环。 默认情况下, bundleDebugJsAndAssets 被跳过,因为在调试/开发模式下我们更喜欢加载
  • 直接从开发服务器捆绑。 您可以在下方看到所有可能的配置
  • 以及它们的默认值。 如果您决定添加配置块,请确保将其添加在
  • apply from: "../../node_modules/react-native/react.gradle"行。
    *
  • 项目.ext.react = [
  • // 生成的包含 JS 包的资产文件的名称
  • bundleAssetName: "index.android.bundle",
    *
  • // 生成包的入口文件
  • entryFile: "index.android.js",
    *
  • // https://facebook.github.io/react-native/docs/performance#enable -the-ram-format
  • 捆绑命令:“ram-bundle”,
    *
  • // 是否在调试模式下捆绑 JS 和资产
  • bundleInDebug: 假,
    *
  • // 是否在release模式下捆绑JS和assets
  • bundleInRelease: 真,
    *
  • // 是否将 JS 和资产捆绑在另一个构建变体中(如果已配置)。
  • // 参见http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants
  • // 配置属性可以是以下格式
  • // 'bundleIn${productFlavor}${buildType}'
  • // 'bundleIn${buildType}'
  • // bundleInFreeDebug: true,
  • // bundleInPaidRelease: true,
  • // bundleInBeta: 真,
    *
  • // 是否在自定义构建变体中禁用开发模式(默认仅在发布中禁用)
  • // 例如:在暂存构建类型中禁用开发模式(如果已配置)
  • devDisabledInStaging: 真,
  • // 配置属性可以是以下格式
  • // 'devDisabledIn${productFlavor}${buildType}'
  • // 'devDisabledIn${buildType}'
    *
  • // 项目的根目录,即“package.json”所在的位置
  • 根: ”../../”,
    *
  • // 将 JS 包资产置于调试模式的位置
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
    *
  • // 将 JS 包资产置于发布模式的位置
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
    *
  • // 放置可绘制资源/React Native 资源的位置,例如您使用的资源
  • // require('./image.png')), 在调试模式
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
    *
  • // 放置可绘制资源/React Native 资源的位置,例如您使用的资源
  • // require('./image.png')), 在发布模式
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
    *
  • // 默认情况下,如果没有任何 JS 文件或资产更改,则跳过 gradle 任务; 这意味着
  • // 我们不看 android/ 或 ios/ 中的文件来确定任务是否达到
  • // 日期; 如果您有任何其他文件夹出于性能原因想要忽略(gradle
  • // 索引整个树),将它们添加到此处。 或者,如果您在 android/ 中有 JS 文件
  • // 例如,您可能想从这里删除它。
  • inputExcludes: ["android/ ", "ios/ "],
    *
  • // 覆盖调用哪个节点以及使用哪些附加参数
  • nodeExecutableAndArgs: ["node"],
    *
  • // 为打包器提供额外的参数
  • extraPackagerArgs:[]
  • ]
    */

项目.ext.react = [
条目文件:“index.js”,
enableHermes: false, // 如果改变则清理并重建
]

申请自:“../../node_modules/react-native/react.gradle”

/**

  • 将此设置为 true 以创建两个单独的 APK 而不是一个:

    • 仅适用于 ARM 设备的 APK


    • 仅适用于 x86 设备的 APK

  • 优点是APK的大小减少了约4MB。
  • 将所有 APK 上传到 Play 商店,人们就会下载
  • 正确的基于其设备的 CPU 架构。
    */
    def enableSeparateBuildPerCPUArchitecture = false

/**

  • 运行 Proguard 以缩小发布版本中的 Java 字节码。
    */
    def enableProguardInReleaseBuilds = false

/**

  • JavaScriptCore 的首选构建风格。
    *
  • 例如,要使用国际变体,您可以使用:
  • def jscFlavor = 'org.webkit:android-jsc-intl:+'
    *
  • 国际变体包括ICU i18n库和必要的数据
  • 允许使用例如Date.toLocaleStringString.localeCompare
  • 与 en-US 以外的区域设置一起使用时给出正确的结果。 注意
  • 此变体每个架构比默认值大 6MiB。
    */
    def jscFlavor = 'org. webkit:android-jsc :+'

/**

  • 是否开启 Hermes 虚拟机。
    *
  • 这应该在 project.ext.react 上设置并在此处进行镜像。 如果没有设置
  • 在 project.ext.react 上,JavaScript 不会被编译成 Hermes Bytecode
  • 使用爱马仕的好处将因此急剧减少。
    */
    def enableHermes = project.ext.react.get("enableHermes", false);

安卓 {
compileSdkVersion rootProject.ext.compileSdkVersion

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

defaultConfig {
    applicationId "com.yourappid"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"
    missingDimensionStrategy 'react-native-camera', 'general'
}
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
    }
}
signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
}
buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        // Caution! In production, you need to generate your own keystore file.
        // see https://facebook.github.io/react-native/docs/signed-apk-android.
        signingConfig signingConfigs.debug
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // https://developer.android.com/studio/build/configure-apk-splits.html
        def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }

    }
}

packagingOptions {
    pickFirst '**/armeabi-v7a/libc++_shared.so'
    pickFirst '**/x86/libc++_shared.so'
    pickFirst '**/arm64-v8a/libc++_shared.so'
    pickFirst '**/x86_64/libc++_shared.so'
    pickFirst '**/x86/libjsc.so'
    pickFirst '**/armeabi-v7a/libjsc.so'
}

}

依赖{
实现文件树(目录:“库”,包括:[“*.jar”])
实现 "com.facebook.react :react-native :+" // 来自 node_modules

if (enableHermes) {
  def hermesPath = "../../node_modules/hermesvm/android/";
  debugImplementation files(hermesPath + "hermes-debug.aar")
  releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
  implementation jscFlavor
}

}

// 运行一次,以便能够使用 BUCK 运行应用程序
// 将所有编译依赖项放入文件夹 libs 以供 BUCK 使用
任务 copyDownloadableDepsToLibs(类型:复制){
从configuration.compile
进入“库”
}

申请自:文件(“../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle”); applyNativeModulesAppBuildGradle(项目)

谢谢,@lucasferreiraestevam。 顺便说一句,您可以将此代码格式化为源代码以便更好地阅读。
无论如何,我没有看到与您的示例有太大区别。 但再次感谢你

为新项目再次添加所有库后为我工作。 谢谢大家

我的问题还没有解决。 我仍然遇到相同的运行时错误。 有人能帮助我吗。

@SAHITYASAI展示你的build.gradle

android/build.gradle :-

buildscript { ext { buildToolsVersion = "28.0.3" minSdkVersion = 16 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion: "15.0.0" firebaseVersion: "15.0.0" } repositories { google() jcenter() mavenLocal() maven { url 'https://plugins.gradle.org/m2/' } // Gradle Plugin Portal } dependencies { classpath("com.android.tools.build:gradle:3.4.1") classpath 'com.google.gms:google-services:4.3.2' classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.5, 0.99.99]' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } google() jcenter() } } apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

android/app/build.gradle :-

apply plugin: "com.android.application" import com.android.build.OutputFile project.ext.react = [ entryFile: "index.js", enableHermes: false, // clean and rebuild if changing ] apply from: "../../node_modules/react-native/react.gradle" def enableSeparateBuildPerCPUArchitecture = false def enableProguardInReleaseBuilds = false def jscFlavor = 'org.webkit:android-jsc:+' def enableHermes = project.ext.react.get("enableHermes", false); android { compileSdkVersion rootProject.ext.compileSdkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { applicationId "com.tutelage" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 3 versionName "1.2" multiDexEnabled true } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } } signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } applicationVariants.all { variant -> variant.outputs.each { output -> def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } } } packagingOptions { pickFirst '**/armeabi-v7a/libc++_shared.so' pickFirst '**/x86/libc++_shared.so' pickFirst '**/arm64-v8a/libc++_shared.so' pickFirst '**/x86_64/libc++_shared.so' pickFirst '**/x86/libjsc.so' pickFirst '**/armeabi-v7a/libjsc.so' } } dependencies { implementation project(':react-native-onesignal') compile project(':react-native-admob') implementation "com.google.android.gms:play-services-base:17.0.0" implementation ('com.google.android.gms:play-services-ads:18.1.1') { force = true; } implementation 'com.google.firebase:firebase-analytics:17.2.0' implementation 'com.google.firebase:firebase-auth:18.1.0' implementation 'com.google.firebase:firebase-firestore:20.2.0' implementation 'com.google.firebase:firebase-ads:18.1.1' implementation project(':@react-native-community_netinfo') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.facebook.react:react-native:+" // From node_modules implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" // implementation "com.google.android.gms:play-services-ads-lite:[18.1.1]" if (enableHermes) { def hermesPath = "../../node_modules/hermesvm/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } } task copyDownloadableDepsToLibs(type: Copy) { from configurations.compile into 'libs' } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) apply plugin: 'com.google.gms.google-services'

@SAHITYASAI根据文档,您应该移动此代码

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/'}
    }
    dependencies {
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

repositories {
    maven { url 'https://maven.google.com' }
}

app/build.gradle 。 将其移至文件开头

并请重新格式化您的代码

同样的问题在这里
`构建在 3 秒内失败

错误 无法安装应用程序。 确保您已设置 Android 开发环境: https: //facebook.github.io/react-native/docs/getting-started.html#android -development-environment。
错误:命令失败:gradlew.bat app:installDebug -PreactNativeDevServerPort=8081

FAILURE:构建失败,出现异常。

  • 什么地方出了错:
    任务“: app:validateSigningDebug ”执行失败。

    未找到用于签名配置“调试”的密钥库文件“E:\React Native\推送通知\react-native-onesignal\examples\RNOneSignal\android\app\debug.keystore”。

  • 尝试:
    使用 --stacktrace 选项运行以获取堆栈跟踪。 使用 --info 或 --debug 选项运行以获得更多日志输出。 使用 --scan 运行以获得完整的见解。

  • https://help.gradle.org获取更多帮助

3 秒内构建失败

at checkExecSyncError (child_process.js:601:13)
at execFileSync (child_process.js:621:13)
at runOnAllDevices (E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\runOnAllDevices.js:74:39)
at buildAndRun (E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\index.js:158:41)
at then.result (E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\node_modules\@react-native-community\cli-platform-android\build\commands\runAndroid\index.js:125:12)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)`

我让它与最新的 react-native-onesignal 包一起使用!

这是我的project/build.gradle

Screenshot 2019-10-04 at 8 01 09 PM

这是我的project/app/build.gradle文件

Screenshot 2019-10-04 at 8 01 37 PM

使用它的步骤是

yarn add react-native-onesignal

那么对于ios
简单地
cd ios && pod install

对于安卓

简单地

react-native run-android自动链接包

@waqaramjad您的问题与代码签名有关

Keystore file 'E:\React Native\push notification\react-native-onesignal\examples\RNOneSignal\android\app\debug.keystore' not found for signing config 'debug'.

@indapublic那么解决方案是什么?

@waqaramjad显示您的android/app/build.gradlesigningConfigs部分

@indapublic这里是 android/app/build.gradle
`// 顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。

构建脚本{
分机{
buildToolsVersion = "28.0.3"
minSdkVersion = 16
compileSdkVersion = 28
目标SDK版本= 28
supportLibVersion = "28.0.0"
}
存储库{
谷歌()
jcenter()
}
依赖{
classpath("com.android.tools.build:gradle:3.4.1")

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

所有项目{
存储库{
行家本地()
行家{
// 所有 React Native(JS、Obj-C 源代码、Android 二进制文件)都是从 npm 安装的
url("$rootDir/../node_modules/react-native/android")
}
行家{
// Android JSC 从 npm 安装
url("$rootDir/../node_modules/jsc-android/dist")
}

    google()
    jcenter()
}

}
`

@waqaramjad你有什么 RN 版本?

“0.60.5”

您是否更新了现有应用程序或创建了新应用程序?

我只是克隆了一个信号仓库中现有的应用程序示例,然后启动它

@waqaramjad你应该先说:)

首先:你打印了android/build.gradle ,而不是android/app/build.gradle

第二:您应该生成关于本手册的调试和发布密钥库,例如

btw:我看到你使用 Windows,所以可能你应该使用一些东西来启动 keytool,我没有使用 Windows 的经验。

但是为什么我需要密钥库,因为我不想签名 apk,我只想测试它

而这里是android/app/build.gradle的代码

`应用插件:“com.android.application”

导入 com.android.build.OutputFile

/**

  • react.gradle 文件为每个构建变体注册一个任务(例如 bundleDebugJsAndAssets
  • 和 bundleReleaseJsAndAssets)。
  • 这些基本上在 Android 构建期间使用正确的参数调用react-native bundle
  • 循环。 默认情况下, bundleDebugJsAndAssets 被跳过,因为在调试/开发模式下我们更喜欢加载
  • 直接从开发服务器捆绑。 您可以在下方看到所有可能的配置
  • 以及它们的默认值。 如果您决定添加配置块,请确保将其添加在
  • apply from: "../../node_modules/react-native/react.gradle"行。
    *
  • 项目.ext.react = [
  • // 生成的包含 JS 包的资产文件的名称
  • bundleAssetName: "index.android.bundle",
    *
  • // 生成包的入口文件
  • entryFile: "index.android.js",
    *
  • // https://facebook.github.io/react-native/docs/performance#enable -the-ram-format
  • 捆绑命令:“ram-bundle”,
    *
  • // 是否在调试模式下捆绑 JS 和资产
  • bundleInDebug: 假,
    *
  • // 是否在release模式下捆绑JS和assets
  • bundleInRelease: 真,
    *
  • // 是否将 JS 和资产捆绑在另一个构建变体中(如果已配置)。
  • // 参见http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants
  • // 配置属性可以是以下格式
  • // 'bundleIn${productFlavor}${buildType}'
  • // 'bundleIn${buildType}'
  • // bundleInFreeDebug: true,
  • // bundleInPaidRelease: true,
  • // bundleInBeta: 真,
    *
  • // 是否在自定义构建变体中禁用开发模式(默认仅在发布中禁用)
  • // 例如:在暂存构建类型中禁用开发模式(如果已配置)
  • devDisabledInStaging: 真,
  • // 配置属性可以是以下格式
  • // 'devDisabledIn${productFlavor}${buildType}'
  • // 'devDisabledIn${buildType}'
    *
  • // 项目的根目录,即“package.json”所在的位置
  • 根: ”../../”,
    *
  • // 将 JS 包资产置于调试模式的位置
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
    *
  • // 将 JS 包资产置于发布模式的位置
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
    *
  • // 放置可绘制资源/React Native 资源的位置,例如您使用的资源
  • // require('./image.png')), 在调试模式
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
    *
  • // 放置可绘制资源/React Native 资源的位置,例如您使用的资源
  • // require('./image.png')), 在发布模式
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
    *
  • // 默认情况下,如果没有任何 JS 文件或资产更改,则跳过 gradle 任务; 这意味着
  • // 我们不看 android/ 或 ios/ 中的文件来确定任务是否达到
  • // 日期; 如果您有任何其他文件夹出于性能原因想要忽略(gradle
  • // 索引整个树),将它们添加到此处。 或者,如果您在 android/ 中有 JS 文件
  • // 例如,您可能想从这里删除它。
  • inputExcludes: ["android/ ", "ios/ "],
    *
  • // 覆盖调用哪个节点以及使用哪些附加参数
  • nodeExecutableAndArgs: ["node"],
    *
  • // 为打包器提供额外的参数
  • extraPackagerArgs:[]
  • ]
    */

项目.ext.react = [
条目文件:“index.js”,
enableHermes: false, // 如果改变则清理并重建
]

申请自:“../../node_modules/react-native/react.gradle”

/**

  • 将此设置为 true 以创建两个单独的 APK 而不是一个:

    • 仅适用于 ARM 设备的 APK


    • 仅适用于 x86 设备的 APK

  • 优点是APK的大小减少了约4MB。
  • 将所有 APK 上传到 Play 商店,人们就会下载
  • 正确的基于其设备的 CPU 架构。
    */
    def enableSeparateBuildPerCPUArchitecture = false

/**

  • 运行 Proguard 以缩小发布版本中的 Java 字节码。
    */
    def enableProguardInReleaseBuilds = false

/**

  • JavaScriptCore 的首选构建风格。
    *
  • 例如,要使用国际变体,您可以使用:
  • def jscFlavor = 'org.webkit:android-jsc-intl:+'
    *
  • 国际变体包括ICU i18n库和必要的数据
  • 允许使用例如Date.toLocaleStringString.localeCompare
  • 与 en-US 以外的区域设置一起使用时给出正确的结果。 注意
  • 此变体每个架构比默认值大 6MiB。
    */
    def jscFlavor = 'org. webkit:android-jsc :+'

/**

  • 是否开启 Hermes 虚拟机。
    *
  • 这应该在 project.ext.react 上设置并在此处进行镜像。 如果没有设置
  • 在 project.ext.react 上,JavaScript 不会被编译成 Hermes Bytecode
  • 使用爱马仕的好处将因此急剧减少。
    */
    def enableHermes = project.ext.react.get("enableHermes", false);

安卓 {
compileSdkVersion rootProject.ext.compileSdkVersion

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

defaultConfig {
    applicationId "com.rnonesignal"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"
}
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
    }
}
signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
}
buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        // Caution! In production, you need to generate your own keystore file.
        // see https://facebook.github.io/react-native/docs/signed-apk-android.
        signingConfig signingConfigs.debug
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // https://developer.android.com/studio/build/configure-apk-splits.html
        def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }

    }
}

packagingOptions {
    pickFirst '**/armeabi-v7a/libc++_shared.so'
    pickFirst '**/x86/libc++_shared.so'
    pickFirst '**/arm64-v8a/libc++_shared.so'
    pickFirst '**/x86_64/libc++_shared.so'
    pickFirst '**/x86/libjsc.so'
    pickFirst '**/armeabi-v7a/libjsc.so'
}

}

依赖{
实现文件树(目录:“库”,包括:[“*.jar”])
实现 "com.facebook.react :react-native :+" // 来自 node_modules

if (enableHermes) {
  def hermesPath = "../../node_modules/hermesvm/android/";
  debugImplementation files(hermesPath + "hermes-debug.aar")
  releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
  implementation jscFlavor
}

}

// 运行一次,以便能够使用 BUCK 运行应用程序
// 将所有编译依赖项放入文件夹 libs 以供 BUCK 使用
任务 copyDownloadableDepsToLibs(类型:复制){
从configuration.compile
进入“库”
}

申请自:文件(“../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle”); applyNativeModulesAppBuildGradle(项目)
`

但是您想为您的设备安装它,不是吗?
签名配置在这里

@indapublic谢谢,我的应用程序现在正在成功构建。 但是我只需要以编程方式仅向那些连续 15 天不活动的用户发送通知,而无需使用 onesignal 通知仪表板。 任何人都可以帮助我。

我认为您应该为此创建新问题,不是吗?

@SAHITYASAI
请通过 OneSignal.com 联系我们的支持渠道以获得进一步帮助。 干杯

此页面是否有帮助?
0 / 5 - 0 等级