assembleRelease失败,反应原生0.50

时间:2017-11-24 03:08:50

标签: react-native-android

使用gradle-plugin 3.0.0 Gradle分布4.1.0 反应原生0.50 Linux fedora 27

应用名称是u1b。 项目结构 /proj/mob/rn.common(这是node_modules和我所有js相关的东西) / proj / mob / a / u1b - 是Android应用程序所在的位置。

项目结构不同于通常由锅炉板反应原生创建app脚本创建的项目结构(因为我的node_modules不仅仅是Android应用程序的一级)。 但不清楚这是否是一个问题。

我一直在调试模式下使用react-native库构建我的android。 现在是时候开始构建发布了。 但我遇到了一个问题

bash gradlew assemble发布错误:

> Task :app:bundleReleaseJsAndAssets
Scanning folders for symlinks in /home/v/devel/mine/proj/mob/rn.common/node_modules (12ms)
Scanning folders for symlinks in /home/v/devel/mine/proj/mob/rn.common/node_modules (9ms)
Loading dependency graph, done.
warning: the transform cache was reset.
bundle: start
bundle: finish
bundle: Writing bundle output to: /home/v/tmp/u1b/app/intermediates/assets/release/index.android.bundle
bundle: Done writing bundle output
bundle: Copying 18 asset files
bundle: Done copying assets

/home/v/tmp/u1b/app/intermediates/res/merged/release/drawable-mdpi/src_jsapp_img_material_ic_local_library_black_48dp_android_drawablexxhlack_48dp.png: **error: Invalid filename.  Unable to add.**

它正在查看的图像文件确实不存在。但是我不知道该文件名是如何构造的,以及为什么它正在寻找它。

我的gradle.properties包含一个由于错误而切换到旧apk的标志

# https://github.com/react-community/react-navigation/issues/1976
android.enableAapt2=false

有人可以了解图像名称是如何决定的以及可能导致错误的原因

谢谢

1 个答案:

答案 0 :(得分:3)

解决。

我弄清楚了如何构建有问题的文件名,然后我就能够缓解“图像文件路径太深”的情况。

基本上是

下面的文件名
  

src_jsapp_img_material_ic_local_library_black_48dp_android_drawablexxhblack_48dp.png

是文件驻留在我的javascript文件夹中的路径的连接(从node_modules所在的同一级别开始)

我的index.android.js引用静态图标文件

icon: require('./src/js.app/img/material/ic_local_library_black_48dp/android/drawable-xxhdpi/ic_local_library_black_48dp.png'),

当捆绑器构造出有问题的文件名时,它基本上将路径的元素一起附加到文件中,并带有一些“mangling”。就像删除一个点(所以js.app成为jsapp)

我刚刚将该文件复制到更高级别的目录(以减少发布构造文件名的长度) 然后发布版本开始工作。

违规文件名的长度约为177个字符。不确定为什么它为发布版本创建了问题。我怀疑这是android工具的限制,而不是facebook的问题。我在buildTools 25.0.3和26.0.2之间来回切换(这也意味着切换android插件版本..并且整个事情需要花费相当多的时间)。但问题出在buildtools版本中。

所以我认为js静态资源(例如图像)的深层目录结构现在是一个问题。因此,最好使用较小的目录深度。