2017-11-09 11 views
0

私はアンドロイドプラットフォームに追加したい画像をいくつか追加しました。 は、私は私の​​3210に<platform name="android">の下に以下の行を追加しました:イオン2:アンドロイドプラットフォームにリソースをコピー

<resource-file src="resources/android/ic_stat_push_android/drawable-hdpi.png" target="platforms/android/res/drawable-hdpi/ic_stat_push_android.png" /> 

は、しかし、私はそれをコピーするように見えることはできません。リソースをコピーするためには何を実行する必要がありますか?

+0

この画像はアプリで使用されていますか?通常、すべてのアプリアセットは「アセット/画像」にあります。 1つの設定でのみ必要な場合は、config.xmlの代わりにnpmにコピーを添付する必要があります。ただの考え –

+0

@PhilipBrackこの画像はプッシュ通知に使用されています。 npmにコピーするとどういう意味ですか? –

+1

私はnpmスクリプトのカスタム動作に追加することに慣れています。それは私が言っていることです。たぶん[this](http://cordova.apache.org/docs/en/dev/guide/appdev/hooks/index.html)が役立つでしょう。 –

答えて

0

この問題が発生した場合は、これが私が使用したソリューションです。

  1. android_custom_resources.jsという名前のファイルを作成します。あなたのプロジェクトのrootディレクトリにあるフォルダに

    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それと呼ばれ、あなたの​​3210

    <hook src="package_hooks/android_custom_resources.js" type="after_prepare" /> 
    
  3. からそれを参照

このスクリプトでは、あなたの<project root>/resources/android/customディレクトリでは、ファイルは、コピー先と同じ名前のフォルダに置かれます。私は、ファイル<my project>/resources/android/custom/drawable-xxhdpi/myfile.pngを持っている場合、それはにコピーされます。 <my project>/platforms/android/res/drawable-xxhdpi/myfile.png

あなたは/ customディレクトリ自体にファイルがある場合、それは確かに解除されますが、それ以外の場合は私のために仕事をしてくれたし、私はそれが役に立てば幸い一時的な解決策を探している他の人。