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;
}
이 이미지는 응용 프로그램에서 사용됩니까? 일반적으로 모든 앱 애셋은 'assets/imgs'에 있습니다. 하나의 설정에서 필요할 경우 아마도 config.xml 대신 npm에 복사본을 첨부해야합니다. 그냥 생각 –
@PhilipBrack이 이미지는 푸시 알림에 사용됩니다. npm으로 복사하면 무슨 뜻입니까? –
npm 스크립트 사용자 정의 동작에 추가하는 데 익숙합니다. 그것이 내가 의미하는 바입니다. 아마도 [this] (http://cordova.apache.org/docs/en/dev/guide/appdev/hooks/index.html)가 도움이 될 것입니다. –