【问题标题】:Android Release Build Failed in React NativeReact Native 中的 Android 发布构建失败
【发布时间】:2019-04-27 05:45:46
【问题描述】:

我在运行./gradlew assembleRelease命令后遇到如下问题。在最新检查期间未能捕获任务“:app:bundleReleaseJsAndAssets”属性“$1”的输入文件快照。

无法列出“/Users/sateweb/Desktop/desktop/Prayer/WeR1Peace/node_modules/metro/node_modules/jest-haste-map/node_modules/.bin/sane”的内容。无法跟随符号链接。

我已经尝试删除和安装 node_modules,还尝试清理构建文件夹并重新构建它。但问题依然存在。

我的 android/build.gradle 文件

buildscript {
    repositories {
        mavenCentral()
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        classpath 'com.google.gms:google-services:3.2.1'
    }
}

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
        maven {
            url "$rootDir/../node_modules/react-native/android"
        }
    }
}


task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "28.0.0"
            }
        }
    }
}

我的 android/app/build.gradle 文件

apply plugin: "com.android.application"

import com.android.build.OutputFile


project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"


def enableSeparateBuildPerCPUArchitecture = false

def enableProguardInReleaseBuilds = false

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId "com.wer1peace"
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->

            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    compile(project(":react-native-google-signin")){
        exclude group: "com.google.android.gms" // very important
    }
    compile project(':react-native-fbsdk')
    compile project(':react-native-vector-icons')
    compile project(':react-native-splash-screen')
    compile project(':react-native-image-picker')
    compile project(':react-native-gesture-handler')
    compile project(':react-native-device-info')

    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.android.support:appcompat-v7:28.0.0"
    implementation "com.facebook.react:react-native:+"  // From node_modules
    implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
    //Google Signin
    implementation 'com.google.android.gms:play-services-auth:16.0.1' // should be at least 9.0.0

    implementation project(':react-native-fbsdk')
    implementation project(':react-native-vector-icons')
    implementation project(':react-native-image-picker')
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-device-info')
    implementation project(':react-native-splash-screen')
}

task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}
apply plugin: 'com.google.gms.google-services'

我的 package.json 文件

{
  "name": "app_name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },
  "dependencies": {
    "apisauce": "^1.0.2",
    "moment": "^2.24.0",
    "native-base": "^2.12.1",
    "q": "^1.5.1",
    "react": "16.6.1",
    "react-native": "0.57.7",
    "react-native-device-info": "^1.5.0",
    "react-native-elements": "^1.1.0",
    "react-native-extended-stylesheet": "^0.11.1",
    "react-native-fbsdk": "^0.8.0",
    "react-native-gesture-handler": "^1.1.0",
    "react-native-google-signin": "^2.0.0",
    "react-native-image-picker": "^0.28.1",
    "react-native-simple-toast": "0.0.8",
    "react-native-splash-screen": "^3.2.0",
    "react-native-vector-icons": "^6.4.2",
    "react-navigation": "^3.8.1"
  },
  "devDependencies": {
    "babel-jest": "24.7.1",
    "jest": "24.7.1",
    "metro-react-native-babel-preset": "0.53.1",
    "react-test-renderer": "16.6.1"
  },
  "jest": {
    "preset": "react-native"
  },
  "rnpm": {
    "assets": [
      "./src/resources/fonts"
    ]
  }
}

package com. app_name;
import android.os.Bundle; // here
import com.facebook.react.ReactActivity;
import android.content.Intent;
import org.devio.rn.splashscreen.SplashScreen; // here
public class MainActivity extends ReactActivity {

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        MainApplication.getCallbackManager().onActivityResult(requestCode, resultCode, data);
    }

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this, R.style.SplashScreenTheme);  // here
        super.onCreate(savedInstanceState);
    }
    @Override
    protected String getMainComponentName() {
        return "app_name";
    }
}

package com.app_name;

import android.app.Application;

import com.facebook.react.ReactApplication;
import co.apptailor.googlesignin.RNGoogleSigninPackage;
import com.facebook.reactnative.androidsdk.FBSDKPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import org.devio.rn.splashscreen.SplashScreenReactPackage;
import com.imagepicker.ImagePickerPackage;
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
import com.learnium.RNDeviceInfo.RNDeviceInfo;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.Arrays;
import java.util.List;

import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;

import com.facebook.FacebookSdk;  //new
//Google Signin
import co.apptailor.googlesignin.RNGoogleSigninPackage;  // <--- import


public class MainApplication extends Application implements ReactApplication {

  private static CallbackManager mCallbackManager = CallbackManager.Factory.create();

  protected static CallbackManager getCallbackManager() {
    return mCallbackManager;
  }

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new RNGoogleSigninPackage(),
            new FBSDKPackage(mCallbackManager),
            new VectorIconsPackage(),
            new SplashScreenReactPackage(),
            new ImagePickerPackage(),
            new RNGestureHandlerPackage(),
            new RNDeviceInfo()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
     // FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
    SoLoader.init(this, /* native exopackage */ false);
  }
}

我希望构建应用的发布版本没有任何问题。

相反,我遇到了上面提到的错误。

解决方案:我终于想通了我需要通过这个代码sn-p在项目级build.gradle文件中显式设置编译SDK版本

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 27
                buildToolsVersion "27.0.2"
            }
        }
    }
}

【问题讨论】:

  • 您是否尝试删除您的 node_modules 文件夹并再次安装依赖项?你的 package.json 的内容是什么?
  • 我编辑了我的代码并保留了 package.json 文件

标签: android react-native react-native-fbsdk


【解决方案1】:

您使用的是哪个版本的 RN?你可以升级到 React Native 到 最新版本 来解决这个问题。 或者您可以尝试删除 node_modules 中的 .bin 文件夹,然后再次重新安装依赖项。

【讨论】:

  • 虽然我能够通过 rm -rf node_modulesyarn 解决这个错误这产生了另一个问题 react-native-fbsdk 声明 任务':react-native-fbsdk:verifyReleaseResources' 执行失败。 > com.android.ide.common.process.ProcessException: 无法执行 aapt
  • 所以你的问题通过删除 node_modules 解决了,很好,接下来你得到 fbsdk 错误,因为这个@KevinGrot 解释得很好。检查this
  • 谢谢您的回复,但这并没有解决我的问题,我正在上传我的两个主要类文件以供编辑参考
  • 收到错误错误:链接引用失败。出了什么问题:任务':react-native-fbsdk:verifyReleaseResources'执行失败。 > com.android.ide.common.process.ProcessException: 执行 aapt 失败
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2018-03-08
  • 2019-03-21
  • 1970-01-01
  • 2020-08-12
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多