X-Git-Url: https://git.saurik.com/android/aapt.git/blobdiff_plain/e1783683470d8c68148fb46f118d943bcfae6a65..52ffc16944b9fc244558c21d33cbaf8f514ddb7a:/Command.cpp diff --git a/Command.cpp b/Command.cpp index 739763e..89f45df 100644 --- a/Command.cpp +++ b/Command.cpp @@ -1353,6 +1353,8 @@ int doPackage(Bundle* bundle) status_t err; sp assets; int N; + FILE* fp; + String8 dependencyFile; // -c zz_ZZ means do pseudolocalization ResourceFilter filter; @@ -1387,6 +1389,13 @@ int doPackage(Bundle* bundle) // Load the assets. assets = new AaptAssets(); + + // Set up the resource gathering in assets if we're trying to make R.java + if (bundle->getGenDependencies()) { + sp pathStore = new FilePathStore; + assets->setFullResPaths(pathStore); + } + err = assets->slurpFromArgs(bundle); if (err < 0) { goto bail; @@ -1396,7 +1405,7 @@ int doPackage(Bundle* bundle) assets->print(); } - // If they asked for any files that need to be compiled, do so. + // If they asked for any fileAs that need to be compiled, do so. if (bundle->getResourceSourceDirs().size() || bundle->getAndroidManifestFile()) { err = buildResources(bundle, assets); if (err != 0) { @@ -1410,10 +1419,29 @@ int doPackage(Bundle* bundle) goto bail; } + if (bundle->getGenDependencies()) { + dependencyFile = String8(bundle->getRClassDir()); + // Make sure we have a clean dependency file to start with + dependencyFile.appendPath("R.d"); + fp = fopen(dependencyFile, "w"); + fclose(fp); + } + // Write out R.java constants if (assets->getPackage() == assets->getSymbolsPrivatePackage()) { if (bundle->getCustomPackage() == NULL) { err = writeResourceSymbols(bundle, assets, assets->getPackage(), true); + // Copy R.java for libraries + if (bundle->getExtraPackages() != NULL) { + // Split on colon + String8 libs(bundle->getExtraPackages()); + char* packageString = strtok(libs.lockBuffer(libs.length()), ":"); + while (packageString != NULL) { + err = writeResourceSymbols(bundle, assets, String8(packageString), true); + packageString = strtok(NULL, ":"); + } + libs.unlockBuffer(); + } } else { const String8 customPkg(bundle->getCustomPackage()); err = writeResourceSymbols(bundle, assets, customPkg, true); @@ -1432,6 +1460,19 @@ int doPackage(Bundle* bundle) } } + if (bundle->getGenDependencies()) { + // Now that writeResourceSymbols has taken care of writing the + // dependency targets to the dependencyFile, we'll write the + // pre-requisites. + fp = fopen(dependencyFile, "a+"); + fprintf(fp, " : "); + err = writeDependencyPreReqs(bundle, assets, fp); + + // Also manually add the AndroidManifeset since it's a non-asset + fprintf(fp, "%s \\\n", bundle->getAndroidManifestFile()); + fclose(fp); + } + // Write out the ProGuard file err = writeProguardFile(bundle, assets); if (err < 0) {