web-dev-qa-db-ja.com

React Native Android Release Build Failing-Gradle

私はかなり複雑なプロジェクトを手に入れました。そのうちのいくつかは、過去1年の古いコードか、またはReactネイティブ時間は永遠です。通常のデバッグビルドは正常に動作していますが、リリースビルドにエラーがあります。他の場所からの回答を集めて、できる限りそれを作成しましたが、この最後の部分をどのようにすればいいかわかりません。

リソースを適切にバンドルしていないため、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
9
GenericJam

私のために働いたこれを解決する方法は、エラーを引き起こしているサポートライブラリのnode_modulesコードに飛び込むことです。

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で修正されるので、この回避策は必要ありません。

編集:私はそれを自分で試したことはありませんが、ペッターのソリューションが優れていると思う。おそらく最初に試してみて、うまくいかない場合は次に試してください。

17
GenericJam

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
            }
        }
    }
}
25
Petter