React Native Android发布构建失败 - Gradle

10

我有一个相当复杂的项目,其中一些是去年或者更久以前的代码,在React Native的时间中已经是很久远了。

普通的调试版本没有问题,但是发布版本会出现错误。我从其他地方拼凑了一些答案,才走到了现在这一步,但是我不知道如何解决最后这个问题。

我不断地得到绑定错误,因为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
2个回答

27

在 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
            }
        }
    }
}

20

我解决这个问题的方法是深入研究触发错误的支持库的node_modules代码。

您需要进入node_modules/project-name/android/build.gradle并更改此内容。

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    ...
}

请将/sdk版本/更新为/android/app/build.gradle中实际的SDK版本号。

例如:

to whatever the sdk version is in your /android/app/build.gradle is. For example:
android {
    compileSdkVersion 27
    buildToolsVersion "27.0.1"
    ...
}
希望React Native能够解决这个问题,这样就不再需要这个解决方法了。 编辑:我认为Petter的解决方案可能更好,虽然我自己还没有尝试过。首先尝试那个,如果不行,再尝试这个。

谢谢!唯一有效的方法就是这个。还要注意的是:只有在我将Gradle降级到3.0之前,它才能正常工作,而我可能是意外地通过IDE升级了它。 - ivanmartinvalle
你的解决方案十分优秀,值得一千个赞!感谢你! - haotang
@GenericJam 你好,你说的 Node_modules 里的 Project-Name 是什么意思?我在里面没有找到任何东西? - DevAS
@Gha 例如:your_app/node_modules/react-native-camera/android/build.gradle。并非所有依赖项都有android目录。如果没有这个,那么这可能不是您的问题。也许可以尝试Petter的解决方案。 - GenericJam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接