使用gradle插件3.0.0级配4.1.0反应天然0.50Linux软帽27
应用程序名称为u1b。项目结构/proj/mob/rn.common(这是node_modules和我所有与js相关的东西所在的地方)/proj/mob/a/u1b——是安卓应用程序所在的位置。
项目结构不同于boiler-plate-react原生create-app脚本通常创建的项目结构(因为我的nodemodule不仅仅是安卓应用程序的一个级别)。但尚不清楚这是否是一个问题。
我一直在调试模式下用react原生库构建我的android。现在是时候开始构建发布了。但我遇到了一个问题
bash-gradlew assemblyRelease错误输出:
> 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.**
它正在查看的图像文件确实不在那里。然而,我不知道这个文件名是如何构建的,以及为什么有人在寻找它
我的grade.properties包含一个由于错误而切换到旧apk的标志
# https://github.com/react-community/react-navigation/issues/1976
android.enableAapt2=false
有人能解释一下图像名称是如何决定的,以及错误的原因是什么吗
谢谢
已解决。
我弄清楚了有问题的文件名是如何构建的,然后我就能够缓解"图像文件的路径太深"的问题。
基本上是下面的文件名
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'),
当bundler构建那个有问题的文件名时,它基本上是将文件的路径元素附加在一起,并进行一些"篡改"。就像去掉一个点(所以js.app变成了jsapp)
我刚刚将该文件复制到一个更高级别的目录中(以减少发行版构建的文件名的长度)然后发布版本开始工作。
违规文件名的长度约为177个字符。不确定它为什么会给发布版本带来问题。我怀疑这是安卓工具的限制,而不是脸书的问题。我在buildTools 25.0.3和26.0.2之间来回切换(这也意味着切换android插件版本……整个过程花费了相当长的时间)。但问题出在任何一个构建工具版本中。
所以我认为js静态资源(例如图像)的深层目录结构目前是个问题。所以最好使用较小的目录深度。