我有一个使用Ionic2
/Cordova Plugins
/Android
的项目。
> mkdir stackoverflow-question
> cd stackoverflow-question
> git clone https://github.com/napolev/stackoverflow-question.git .
> npm install
> ionic platform add android
> ionic run android -l
我的问题是,当我添加android平台时,会创建以下目录:
/platforms/android/cordova-plugin-hash-generator
创建此目录是为了在其中保存文件:testercordovaplugins-build.gradle
,它注意包括我在自己做的一个插件上使用的一些第三方库:cordova-plugin-hash-generator
.
一切都编译和运行良好。我只想从以下位置更改:
platforms/android/cordova-plugin-hash-generator
到(例如(:
platforms/android/gradle/cordova-plugin-hash-generator
所以我可以对其他插件做同样的事情,防止在以下位置创建所有这些目录:platforms/android/
.仅用于组织目的。
知道如何做到这一点吗?
这个基本应用程序利用我创建的插件来输出单词的 md5 摘要:hello
(基本的东西(。
您不能使用 Cordova 配置来更改放置插件 gradle 文件的目录,因此您需要手动移动它,例如使用自定义钩子脚本。
例如,如果您的插件具有:
myplugin/plugin.xml
:
...
<platform name="android">
<framework src="mygradle.gradle" custom="true" type="gradleReference" />
</platform>
...
然后科尔多瓦会将您的 Gradle 文件部署到platforms/android/myplugin/mygradle.gradle
.这是 Cordova 的默认行为:它将您的 gradle 文件放在以您的插件 ID 命名的目录中。
因此,如果您想将 Gradle 文件移动到其他地方(例如/platforms/android/gradle/
(,您可以使用如下所示的钩子脚本:
myplugin/plugin.xml
:
...
<platform name="android">
<framework src="mygradle.gradle" custom="true" type="gradleReference" />
<hook src="myhook.js" type="after_plugin_install" />
</platform>
...
myplugin/myhook.js
:
var myPluginId = "myplugin";
module.exports = function(ctx) {
var path = ctx.requireCordovaModule('path');
var fs = ctx.requireCordovaModule('fs');
var cwd = ctx.opts.projectRoot;
var pluginId = ctx.opts.plugin.id;
if(pluginId !== myPluginId) return;
var sourcePath = path.resolve(cwd, "platforms", "android", pluginId);
var targetPath = path.resolve(cwd, "platforms", "android", "gradle", pluginId);
fs.renameSync(sourcePath, targetPath);
};