Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 588d728f authored by Clark Scheff's avatar Clark Scheff Committed by Michael Bestas
Browse files

androidfw: Allow package ID to be overriden at runtime

Modify aapt tool to provide proper support for -x option.

Change-Id: Icc118b1afdc64d9f19c646c63d40f7243bf5265c
parent 916ccd97
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ public:
    Bundle(void)
        : mCmd(kCommandUnknown), mVerbose(false), mAndroidList(false),
          mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
          mUpdate(false), mExtending(false),
          mUpdate(false), mExtending(false), mExtendedPackageId(0),
          mRequireLocalization(false), mPseudolocalize(NO_PSEUDOLOCALIZATION),
          mWantUTF16(false), mValues(false), mIncludeMetaData(false),
          mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
@@ -95,6 +95,8 @@ public:
    void setUpdate(bool val) { mUpdate = val; }
    bool getExtending(void) const { return mExtending; }
    void setExtending(bool val) { mExtending = val; }
    int getExtendedPackageId(void) const { return mExtendedPackageId; }
    void setExtendedPackageId(int val) { mExtendedPackageId = val; }
    bool getRequireLocalization(void) const { return mRequireLocalization; }
    void setRequireLocalization(bool val) { mRequireLocalization = val; }
    short getPseudolocalize(void) const { return mPseudolocalize; }
@@ -286,6 +288,7 @@ private:
    bool        mMakePackageDirs;
    bool        mUpdate;
    bool        mExtending;
    int         mExtendedPackageId;
    bool        mRequireLocalization;
    short       mPseudolocalize;
    bool        mWantUTF16;
+11 −2
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <cstdlib>
#include <getopt.h>
#include <cassert>
#include <ctype.h>

using namespace android;

@@ -57,7 +58,7 @@ void usage(void)
        "   xmltree          Print the compiled xmls in the given assets.\n"
        "   xmlstrings       Print the strings of the given compiled xml assets.\n\n", gProgName);
    fprintf(stderr,
        " %s p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \\\n"
        " %s p[ackage] [-d][-f][-m][-u][-v][-x[ extending-resource-id]][-z][-M AndroidManifest.xml] \\\n"
        "        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \\\n"
        "        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \\\n"
        "        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \\\n"
@@ -116,7 +117,7 @@ void usage(void)
        "   -m  make package directories under location specified by -J\n"
        "   -u  update existing packages (add new, replace older, remove deleted files)\n"
        "   -v  verbose output\n"
        "   -x  create extending (non-application) resource IDs\n"
        "   -x  either create or assign (if specified) extending (non-application) resource IDs\n"
        "   -z  require localization of resource attributes marked with\n"
        "       localization=\"suggested\"\n"
        "   -A  additional directory in which to find raw asset files\n"
@@ -355,6 +356,14 @@ int main(int argc, char* const argv[])
                break;
            case 'x':
                bundle.setExtending(true);
                argc--;
                argv++;
                if (!argc || !isdigit(argv[0][0])) {
                    argc++;
                    argv--;
                } else {
                    bundle.setExtendedPackageId(atoi(argv[0]));
                }
                break;
            case 'z':
                bundle.setRequireLocalization(true);
+2 −1
Original line number Diff line number Diff line
@@ -1186,7 +1186,8 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil
        packageType = ResourceTable::AppFeature;
    }

    ResourceTable table(bundle, String16(assets->getPackage()), packageType);
    int extendedPackageId = bundle->getExtendedPackageId();
    ResourceTable table(bundle, String16(assets->getPackage()), packageType, extendedPackageId);
    err = table.addIncludedResources(bundle, assets);
    if (err != NO_ERROR) {
        return err;
+6 −1
Original line number Diff line number Diff line
@@ -1748,7 +1748,7 @@ status_t compileResourceFile(Bundle* bundle,
    return hasErrors ? STATUST(UNKNOWN_ERROR) : NO_ERROR;
}

ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage, ResourceTable::PackageType type)
ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage, ResourceTable::PackageType type, ssize_t pkgIdOverride)
    : mAssetsPackage(assetsPackage)
    , mPackageType(type)
    , mTypeIdOffset(0)
@@ -1774,6 +1774,11 @@ ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage, Reso
            assert(0);
            break;
    }

    if (pkgIdOverride != 0) {
        packageId = pkgIdOverride;
    }

    sp<Package> package = new Package(mAssetsPackage, packageId);
    mPackages.add(assetsPackage, package);
    mOrderedPackages.add(package);
+2 −1
Original line number Diff line number Diff line
@@ -112,7 +112,8 @@ public:
                                                const ConfigDescription& sourceConfig,
                                                const int sdkVersionToGenerate);

    ResourceTable(Bundle* bundle, const String16& assetsPackage, PackageType type);
    ResourceTable(Bundle* bundle, const String16& assetsPackage, PackageType type,
                    ssize_t pkgIdOverride);

    const String16& getAssetsPackage() const {
        return mAssetsPackage;