我添加了一些只想添加到android平台的图像。我在config.xml
的<platform name="android">
下添加了以下行:
<resource-file src="resources/android/ic_stat_push_android/drawable-hdpi.png" target="platforms/android/res/drawable-hdpi/ic_stat_push_android.png" />
然而,我似乎无法复制它。我需要运行什么才能复制资源?
对于任何遇到这个问题的人来说,这就是我最终使用的解决方案。
-
创建一个名为
android_custom_resources.js
:的文件var fs = require('fs'); var path = require('path'); var sourceDir = 'resources/android/custom'; var platformDir = 'platforms/android'; var resourceDirs = [ 'res/drawable-ldpi', 'res/drawable-mdpi', 'res/drawable-mdpi-v11', 'res/drawable-hdpi', 'res/drawable-hdpi-v11', 'res/drawable-xhdpi', 'res/drawable-xhdpi-v11', 'res/drawable-xxhdpi', 'res/drawable-xxhdpi-v11', 'res/drawable-xxxhdpi', 'res/drawable-xxxhdpi-v11' ]; module.exports = function(ctx) { if (ctx.opts.platforms.indexOf('android') < 0) { return; } var Q = ctx.requireCordovaModule('q'); var deferred = Q.defer(); var androidPlatformDir = path.join(ctx.opts.projectRoot, platformDir); var customResourcesDir = path.join(ctx.opts.projectRoot, sourceDir); function copy(src, dest) { var deferred = Q.defer(); fs.stat(src, function(err, stats) { if (err || !stats.isFile()) { return deferred.reject(err); } fs.stat(path.dirname(dest), function(err, stats) { if (err || !stats.isDirectory()) { return deferred.reject(err); } var rs = fs.createReadStream(src); rs.on('error', function(err) { console.error(err.stack); deferred.reject(err); }); var ws = fs.createWriteStream(dest); ws.on('error', function(err) { console.error(err.stack); deferred.reject(err); }); ws.on('close', function() { deferred.resolve(); }); rs.pipe(ws); }); }); return deferred.promise; } fs.stat(customResourcesDir, function(err, stats) { if (err || !stats.isDirectory()) { return deferred.resolve(); } fs.readdir(customResourcesDir, function(err, files) { var copies = []; for (var i in files) { var innerDir = path.join(customResourcesDir, files[i]); var innerFiles = fs.readdirSync(innerDir); for (var k in innerFiles){ var innerFilePath = path.join(innerDir, innerFiles[k]); var innerDestPath = path.join(androidPlatformDir, 'res', files[i], innerFiles[k]); copies.push([innerFilePath, innerDestPath]); } } copies.map(function(args) { return copy.apply(copy, args); }); Q.all(copies).then(function(r) { deferred.resolve(); }, function(err) { console.error(err.stack); deferred.reject(err); }); }); }); return deferred.promise; }
-
把它放在根项目目录中的一个文件夹中(在我的例子中,我称它为
package_hooks
,并从config.xml
中引用它<hook src="package_hooks/android_custom_resources.js" type="after_prepare" />
此脚本假设在<project root>/resources/android/custom
目录中,文件被放置在与您希望将其复制到的文件夹名称相同的文件夹中。例如,如果我有一个文件<my project>/resources/android/custom/drawable-xxhdpi/myfile.png
,它将被复制到:<my project>/platforms/android/res/drawable-xxhdpi/myfile.png
如果你在/custom目录中有文件,它肯定会崩溃,但除此之外,它为我完成了任务,我希望它能帮助其他人寻找临时解决方案。