Ionic 2:将资源复制到android平台



我添加了一些只想添加到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" />

然而,我似乎无法复制它。我需要运行什么才能复制资源?

对于任何遇到这个问题的人来说,这就是我最终使用的解决方案。

  1. 创建一个名为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;
    }
    
  2. 把它放在根项目目录中的一个文件夹中(在我的例子中,我称它为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目录中有文件,它肯定会崩溃,但除此之外,它为我完成了任务,我希望它能帮助其他人寻找临时解决方案。

相关内容

  • 没有找到相关文章

最新更新