android - tutorial - gradle wikipedia




Ant Build AAPT Crunch sta eliminando le informazioni draw9 dalle immagini delle risorse della libreria (2)

Ho un progetto che sta usando un progetto di biblioteca. Il progetto Library ha i file draw9 (9.png) e quando si costruisce l'apk tramite Ant si estrae l'informazione draw9 su aree scalabili e compilabili. Il risultato è che l'applicazione allunga semplicemente le immagini senza usare le informazioni su draw9. In build.xml di Android

 <target name="-package-resources" depends="-crunch">

questo sta chiamando crunch, che aggiorna la cache PNG pre-processata (qualcuno sa dove si trova questa cache?).

-crunch esegue un compito in aapt chiamato crunch. Ma non sono stato in grado di trovare alcuna informazione sugli argomenti. Sembra che stia prendendo i file dalla cartella Res e li inserisca nella cartella out res (di default bin / res).

Quindi ho persino eliminato l'operazione in modo che non eseguisse il crunch e le immagini fisse non fossero state allungate correttamente. L'ho poi sostituito con una copia diretta dei file png nella cartella out res, e ancora lo stesso problema. Ho persino provato un ant pulito tra queste attività e ho avuto lo stesso problema. Il che mi porta a credere che il nascondiglio si trovi all'esterno dell'area del progetto, ma dove?

Nota che quando lo compilo con Eclipse va tutto bene.

L'altra soluzione che funziona per me è copiare queste immagini dalla Libreria nel Progetto Principale, ma non è la soluzione ideale.

Qualcun altro sembra aver avuto problemi con questa confezione di crunch / risorse con aapt in ant build utilizza cache da altri progetti

In questo bug report menzionano la cache usando solo i timestamp per verificare se aggiornare la cache o meno.

Questo sembra essere il codice sorgente di aapt , ma ho avuto problemi nel cercare di scoprire da dove viene trattenuto questo cache leggendolo.

Capire il problema

Per me, quello che stava causando il problema era che stavo usando diverse cartelle (intenzionalmente) in Ant per la mia res, src e bin. C'è un riferimento project.library.res.folder.path che viene riempito nella macro di dipendenza. Punta al res predefinito e alle cartelle bin dal progetto. Quindi quello che ho fatto è stato cambiarli per indicare le mie nuove cartelle. Ma nel fare ciò stavo cambiando i vecchi sono stati elencati. Ha iniziato a mescolare i file di risorse nel progetto di libreria che stavo usando quando aapt era in esecuzione. Quando ho risolto l'ordine, la compilazione era soddisfacente. L'ho fatto anche per project.library.bin.r.file.path.


Penso che devi avere la scricchiola la risorsa del progetto della biblioteca.

Provare

aapt crunch -v -S res -C bin/res

nella cartella del progetto della tua biblioteca e ricostruisci. Questo ha aiutato per me. Ora la domanda è come automatizzarlo.


Ieri ho avuto esattamente lo stesso problema.

Ho una base di codice che uso per creare diversi tipi di app (diff package-name e alcune risorse specifiche) usando formica.

build.xml ha funzionato bene ma 9patches sono stati danneggiati durante l'utilizzo dell'app (come dici tu, trattata come png e allungata).

Ho inchiodato il problema al task -crunch all'interno di una formica (proprio come hai fatto tu).

Nel mio caso, utilizzo due diverse cartelle di ricerca, quindi ho modificato l'attività di crunch originale da questo

<!-- Updates the pre-processed PNG cache -->
    <target name="-crunch">
        <exec executable="${aapt}" taskName="crunch">
            <arg value="crunch" />
            <arg value="-v" />
        <arg value="-S" />
            <arg path="${resource.absolute.dir}" />
            <arg value="-C" />
            <arg path="${out.res.absolute.dir}" />
        </exec>
    </target>

a questa

 <target name="-crunch">
        <exec executable="${aapt}" taskName="crunch">
            <arg value="crunch" />
            <arg value="-v" />
            <arg value="-S" />
            <arg path="${resource.flavour.dir}" />
            <arg value="-S" />
            <arg path="${resource.absolute.dir}" />
            <arg value="-C" />
            <arg path="${out.res.absolute.dir}" />
        </exec>
    </target>

ma questo ha prodotto menzionati artefatti da 9patch (anche in librerie come fb) .. quindi ho pensato di cambiarlo per processare resourceflavour.dir solo se questa non è una libreria che ha dato il risultato corretto (senza artefatti di 9pathc)

<target name="-crunch">
    <do-only-if-not-library elseText="Library project: do not package resources..." >
        <exec executable="${aapt}" taskName="crunch">
            <arg value="crunch" />
            <arg value="-v" />
            <arg value="-S" />
            <arg path="${resource.flavour.dir}" />
            <arg value="-C" />
            <arg path="${out.res.absolute.dir}" />
        </exec>
    </do-only-if-not-library>
        <exec executable="${aapt}" taskName="crunch">
            <arg value="crunch" />
            <arg value="-v" />
            <arg value="-S" />
            <arg path="${resource.absolute.dir}" />
            <arg value="-C" />
            <arg path="${out.res.absolute.dir}" />
        </exec>
</target>

Questo potrebbe darti l'indizio di una soluzione adeguata nel tuo caso.





aapt