gpt4 book ai didi

android - mergeReleaseResources 失败,原因为 `not valid resource name`(来自 package.json 的版本)

转载 作者:行者123 更新时间:2023-12-02 00:50:19 25 4
gpt4 key购买 nike

我在我的 React-Native-App 中要求 package.json 从那里读取版本号以在我的应用程序中显示它:

const pjson = require('../../package.json');

因此,我在使用 gradle 在 Android 中 bundle RELEASE APK 时遇到错误:

Task :app:mergeReleaseResources FAILED /home/Projekte/APP/android/app/build/generated/res/react/release/raw/package.json: Error: package is not a valid resource name (reserved Java keyword)

有没有办法从合并 APK 资源的进程中排除这个 package.json?

最佳答案

解决这个问题最简单的方法是更新到react-native 0.61.x。整个解决方案可见here .

导致问题的原因在哪里,取自上面的链接:

cli will copy files with json extension to resource dir, in Android's case, android/app/build/res.

Here comes a problem. If package.json at the project root gets copied, it won't be renamed as other package.json in node_modules (e.g. raw/node_modules_reactnativecodepush_package.json). Instead, it will reside in res as package.json, which causes the error:

android/app/src/main/res/raw/package.json: Error: package is not a valid resource name (reserved Java keyword)

如果您无法更新,可以直接将补丁应用到您的 node_modules/metro 模块,将 package.json 排除在 bundle 发布过程之外。

补丁:在文件 node_modules/metro/src/DeltaBundler/Serializers/getAssets.js 的第 66 行,替换

getJsOutput(module).type === "js/module/asset"

getJsOutput(module).type === "js/module/asset"&& path.relative(options.projectRoot, module.path) !== "package.json"

将以下文件添加到项目的根目录中,

// fix_metro_android_release_bug.js
// Temporary fix for this issue: https://github.com/facebook/metro/pull/420
const fs = require('fs');

const fileLocation = './node_modules/metro/src/DeltaBundler/Serializers/getAssets.js';
const targetText = 'getJsOutput(module).type === "js/module/asset"';
const replacementText = 'getJsOutput(module).type === "js/module/asset" && path.relative(options.projectRoot, module.path) !== "package.json"';

const fileContent = fs.readFileSync(fileLocation, 'utf8');
if (fileContent.includes(targetText) && !fileContent.includes(replacementText)) {
const patchedFileContent = fileContent.replace(targetText, replacementText);
fs.writeFileSync(fileLocation, patchedFileContent, 'utf8');
}

并将以下代码 fragment 添加到您的 package.json

"scripts": {
"postinstall": "babel-node ./fix_metro_android_release_bug.js",
...
}

关于android - mergeReleaseResources 失败,原因为 `not valid resource name`(来自 package.json 的版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58113912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com