2017-11-09 1 views
0

안드로이드 플랫폼에만 추가하려는 일부 이미지를 추가했습니다. 나는 나의 config.xml<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

이 이미지는 응용 프로그램에서 사용됩니까? 일반적으로 모든 앱 애셋은 'assets/imgs'에 있습니다. 하나의 설정에서 필요할 경우 아마도 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라는 이름의 파일을 생성 : 루트 프로젝트 디렉토리에 폴더에

    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" /> 
    
  3. 에서 참조

이 스크립트는 사용자의 <project root>/resources/android/custom 디렉토리의 경우 파일은 복사 대상 폴더와 동일한 폴더에 저장됩니다. 가 <my project>/platforms/android/res/drawable-xxhdpi/myfile.png

가 가

당신이/사용자 정의 디렉토리 자체에있는 파일이 있다면 그것은 반드시 중단되지만, 그렇지 않으면 나를 위해 일을했고, 나는 희망이 도움이 : 나는 파일 <my project>/resources/android/custom/drawable-xxhdpi/myfile.png이있는 경우 예를 들어,이 복사됩니다 다른 누군가가 임시 해결책을 찾고 있습니다.

관련 문제