如何使用cordova插件挂钩将文件复制到/res/raw

Posted

技术标签:

【中文标题】如何使用cordova插件挂钩将文件复制到/res/raw【英文标题】:How to copy file to /res/raw using cordova plugin hook 【发布时间】:2020-04-01 21:53:54 【问题描述】:

正如标题所示,我正在尝试为 android 构建一个 cordova 插件(这是一个空插件),其目的是将文件复制到 APK 的 /res/raw 文件夹中。 Android 似乎需要这样做,因此 OneSignal 可以在收到通知时播放自定义铃声。为了实现这一点,我使用了 after_plugin_install 和 before_build 的钩子。内容相同,不同的是文件夹。这个钩子是this one的修改版。

我为此使用插件而不是将资源添加到cordova 项目文件夹的原因是因为我无权访问cordova 项目文件夹。因此,我唯一的“解决方法”是使用插件(带有钩子)来做到这一点。

钩子文件的摘录:


// configure all the files to copy from each of the resource paths.
// key of object is the source file, value is the destination location.
// the directory/file structure used closely mirrors how the resources
// are stored in each platform
var androidFilesToCopy = 
  // android icons
  "android/beep.wav": "beep.wav"
;

// required node modules
var fs = require('fs');
var path = require('path');
var rootdir = "plugins";
var buildDir = "build";

// android platform resource path
var platformAndroidPath = 'locales/android/raw/';

我已经测试了 platformAndroidPath 的几个值和几个“挂钩时间线类型”(before_build、after_build、before_prepare 等),但似乎没有一个有效。我还看到,如果我使用“cordova plugins add location”(插件为复数形式),它会检测到文件。如果我使用“cordova plugin add location”(插件作为单数)它不会检测到文件。

此时我有点迷茫,真的不知道现在该去哪里。如果有人能够提供一些指导,那将不胜感激。完整的插件是here。

谢谢!

【问题讨论】:

【参考方案1】:

根据您所针对的 cordova-android 版本,您要查找的路径会有所不同。

例如cordova platform add android@6.4.0,这是整个文件夹结构:

├── hooks
├── platforms
│   └── android
│       ├── CordovaLib
│       ├── assets
│       ├── cordova
│       ├── libs
│       ├── platform_www
│       ├── res # <- this is the path you want!
│       └── src
├── plugins
├── res
└── www

请注意 res 就在“android”文件夹下,这就是 android 资源所在的位置。

但是,对于cordova platform add android@8.0.0

├── hooks
├── platforms
│   └── android
│       ├── CordovaLib
│       ├── app
│       │   └── src
│       │       └── main
│       │           ├── assets
│       │           ├── java
│       │           ├── libs
│       │           └── res # <- this is the path you want!
│       ├── cordova
│       └── platform_www
├── plugins
├── res
└── www

因此,在实践中,这取决于您运行钩子的 Cordova 平台,但通常是这样的:

cordova-android platforms/android/res/raw cordova-android >= 7:platforms/android/app/src/main/res/raw

你可以找到一个类似的例子here。

【讨论】:

以上是关于如何使用cordova插件挂钩将文件复制到/res/raw的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义挂钩添加到 Woocommerce 的自定义插件

如何在 Cordova 插件中加载数据文件?

Cordova cli 使用 7.5mb 的默认启动屏幕/图标将 res 文件夹添加到 /www

将文件添加到 /res/values?

如何将第三方 SDK 正确添加到 Cordova 插件?

将 Cordova 插件导入 Worklight 6