dosya

2016-05-27 14 views
10

Projem paketlenmiş benim Android projesinin ham kaynak dizindeki XML dosyaları var olduğunda Gradle ile ham XML dosyalarında yorumları kaldırmak için:dosya

Project Layout

Ben yorumları kaldırmak istiyorum

Orijinal dosya örneği:

bu dosyalardan ( <!-- ... -->) o .apk dosya olarak paketlenmiş zaman
<?xml version="1.0" encoding="utf-8"?> 
    <celebrations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation="celebrations_schema.xsd"> 

    <!-- This is a very important comment useful during development --> 
    <celebration name="celebration 1" type="oneTime" ... /> 

    <!-- This is another very important comment useful during development --> 
    <celebration name="celebration 2" type="reccurent" ... /> 
</celebrations> 

Beklenen süzülmüş dosyası:

<?xml version="1.0" encoding="utf-8"?> 
<celebrations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation="celebrations_schema.xsd"> 
    <celebration name="celebration 1" type="oneTime" ... /> 
    <celebration name="celebration 2" type="reccurent" ... /> 
</celebrations> 

bazı ilginç benzer çözümler here bulduk, ama çalışmak için yönetemez. Uygulamamda build.gradle

processResources { 
    filesMatching('**/myxmlfiletobestrippedfromcomments.xml') { 
     filter { 
      String line -> line.replaceAll('<!--.*-->', '') 
     } 
    } 
} 

bu satırları ekleme aşağıdaki hata üretir: açılış ve java kodundan XML dosyası ayrıştırma için

Error:(86, 0) Gradle DSL method not found: 'processResources()' 

, aşağıdaki yöntemi kullanın:

InputStream definition = context.getResources().openRawResource(resId); 
... 
try { 
    XmlPullParser parser = Xml.newPullParser(); 
    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 
    parser.setInput(definition, null); 
    parser.nextTag(); 
    return parseCelebrations(parser); 
} finally { 
    definition.close(); 
}  
+0

görünüyor:

Ancak, böyle bir şey için açılış ve benim XML dosyasının ayrıştırma kodunu değiştirmek zorunda kaldı. Bununla birlikte, oluşturma işlemine nasıl ekleneceğinden emin değilsiniz. https://docs.gradle.org/current/userguide/tutorial_using_tasks.html –

cevap

6

Varsayılan xml’in yorumu apk olarak hiçbir paket içermeyecek, test etmek için koda dönüştürebilirsiniz.

+0

"raw" klasöründe saklanmaları dışında. İlk başta bu dosyayı 'res \ xml' dizinine koydum ama xml olanın yanında bir XSD dosyası kullanarak sorunları vardı. Tekrar denedim ve şimdi her şey yolunda: xml dosyaları apk'de okunamıyor ve şema doğrulama işlerim (ilk başta ne yaptığımı bilmiyorum). Ancak, kodumdaki xml dosyasının açılmasını biraz değiştirmem gerekiyordu. – DenisGL

1

Sorunumu, dosyamı res\xml dizinine taşıyarak çözdüm. Bu durumda, XML dosyası 'derlenmiş' ve APK arşivini açtığımda okunamaz durumda. Bir Gradle görevi yapmaya çalışıyoruz gibi

XmlResourceParser xmlResourceParser = context.getResources().getXml(resId); 
... 
// I had to add this line (to skip START_DOCUMENT tag, which was not needed 
// with opening from the `raw` directory) 
while (xmlResourceParser.next() != XmlPullParser.START_TAG); 

return parseCelebrations(xmlResourceParser); 
+0

Ancak, nedenini bilmiyorum ve bu başka bir sorun/soru, XML klasörüne taşındığında, xml dosyanız artık Android Studio'yla XML şemasına karşı doğrulanamıyor. – DenisGL

İlgili konular