React本机Android版本构建失败-Gradle

React本机Android版本构建失败-Gradle,android,android-gradle-plugin,build.gradle,react-native-android,Android,Android Gradle Plugin,Build.gradle,React Native Android,我有一个相当复杂的项目,其中一些是过去一年左右的旧代码,在React Native time中是永久的。 常规调试版本工作正常,但发布版本有错误。我已经从其他地方拼凑了答案,尽我所能,但我不知道如何通过这最后一点 我不断收到一个绑定错误,aapt将失败,因为它没有正确绑定资源 错误代码示例: > Task :app:bundleReleaseJsAndAssets Scanning folders for symlinks in /media/user/1546c7ef-f386-4ba

我有一个相当复杂的项目,其中一些是过去一年左右的旧代码,在React Native time中是永久的。 常规调试版本工作正常,但发布版本有错误。我已经从其他地方拼凑了答案,尽我所能,但我不知道如何通过这最后一点

我不断收到一个绑定错误,aapt将失败,因为它没有正确绑定资源

错误代码示例:

> Task :app:bundleReleaseJsAndAssets 
Scanning folders for symlinks in /media/user/1546c7ef-f386-4baa-90d5-cbd87092d3e31/home/user/Code/React-Native/timesavr/node_modules (9ms)
Scanning folders for symlinks in /media/user/1546c7ef-f386-4baa-90d5-cbd87092d3e31/home/user/Code/React-Native/timesavr/node_modules (6ms)
warning: the transform cache was reset.
Loading dependency graph, done.
bundle: Writing bundle output to: /media/user/1546c7ef-f386-4baa-90d5-cbd87092d3e31/home/user/Code/React-Native/timesavr/android/app/build/intermediates/assets/release/index.android.bundle
bundle: Done writing bundle output

error: resource android:style/TextAppearance.Material.Widget.Button.Borderless.Colored not found.
error: resource android:style/TextAppearance.Material.Widget.Button.Colored not found.
/home/user/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.0.2.aar/28fa7b5f2db0b5e014559f7cf36ab4c7/res/values-v26/values-v26.xml:9:5-12:13: AAPT: error: resource android:attr/colorError not found.

/home/user/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.0.2.aar/28fa7b5f2db0b5e014559f7cf36ab4c7/res/values-v26/values-v26.xml:13:5-16:13: AAPT: error: resource android:attr/colorError not found.

/home/user/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.0.2.aar/28fa7b5f2db0b5e014559f7cf36ab4c7/res/values-v26/values-v26.xml:17:5-93: AAPT: error: style attribute 'android:attr/keyboardNavigationCluster' not found.

error: failed linking references.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':react-native-image-resizer:verifyReleaseResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt

对我来说,解决这个问题的方法是深入研究触发错误的支持库的node_模块代码

您需要进入node_modules/project name/android/build.gradle并更改此项

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    ...
}
无论您的/android/app/build.gradle中的sdk版本是什么。 例如:

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.1"
    ...
}
希望这将在React Native中修复,因此不需要此解决方法


编辑:我怀疑Petter的解决方案是更好的,尽管我自己还没有尝试过。可能先试试这个,如果不起作用,再试试这个。

基于GenericJam的答案,您可以通过在项目
build.gradle
文件中执行类似操作,以编程方式对所有子库执行此操作:

subprojects { subproject ->
    afterEvaluate{
        if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
            android {
                compileSdkVersion rootProject.ext.compileSdkVersion
                buildToolsVersion rootProject.ext.buildToolsVersion
            }
        }
    }
}

非常感谢。唯一对我有用的东西。同样重要的是要注意:只有当我将gradle降级到3.0之前,这才起作用,我必须在意外事件中通过IDE进行升级。你应该为此解决方案获得10万张选票。谢谢大家!@GenericJam您好,在Node_模块中,项目名称是什么意思?我里面什么都没有?@Gha示例:你的应用程序/node\u模块/react-native-camera/android/build.gradle。并非所有依赖项都有android目录。如果没有,这可能不是你的问题。也许试试彼特的解决方案。