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

Commit 2d291d89 authored by Selim Gurun's avatar Selim Gurun
Browse files

Introduce a use32bitAbi flag

Bug: 26874366

On Multiarch apps, it might be necessary to prioritize 32bit Abi ahead
of 64bit ones. The use32bitAbi flag enables this.

This CL also reverts the public api changes in  I2c1fd1d036efe72b28b5fe996416df69a583959f and Ie3ecea6d84e2cb1522e736a21c3a3a24ac62eb27. Previously
the same functionality was provided using a raw abi string that
utilized cpuabioverride flag.

Change-Id: Idce3cbfedd11ef9079ce8a2901e69d30b1cf9ef4
parent ccdd08d3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -198,7 +198,6 @@ package android {
  public static final class R.attr {
    ctor public R.attr();
    field public static final int abiOverride = 16844054; // 0x1010516
    field public static final int absListViewStyle = 16842858; // 0x101006a
    field public static final int accessibilityEventTypes = 16843648; // 0x1010380
    field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -1365,6 +1364,7 @@ package android {
    field public static final deprecated int unfocusedMonthDateColor = 16843588; // 0x1010344
    field public static final int unselectedAlpha = 16843278; // 0x101020e
    field public static final int updatePeriodMillis = 16843344; // 0x1010250
    field public static final int use32bitAbi = 16844054; // 0x1010516
    field public static final int useDefaultMargins = 16843641; // 0x1010379
    field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
    field public static final int useLevel = 16843167; // 0x101019f
+1 −1
Original line number Diff line number Diff line
@@ -293,7 +293,6 @@ package android {
  public static final class R.attr {
    ctor public R.attr();
    field public static final int abiOverride = 16844054; // 0x1010516
    field public static final int absListViewStyle = 16842858; // 0x101006a
    field public static final int accessibilityEventTypes = 16843648; // 0x1010380
    field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -1464,6 +1463,7 @@ package android {
    field public static final deprecated int unfocusedMonthDateColor = 16843588; // 0x1010344
    field public static final int unselectedAlpha = 16843278; // 0x101020e
    field public static final int updatePeriodMillis = 16843344; // 0x1010250
    field public static final int use32bitAbi = 16844054; // 0x1010516
    field public static final int useDefaultMargins = 16843641; // 0x1010379
    field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
    field public static final int useLevel = 16843167; // 0x101019f
+1 −1
Original line number Diff line number Diff line
@@ -198,7 +198,6 @@ package android {
  public static final class R.attr {
    ctor public R.attr();
    field public static final int abiOverride = 16844054; // 0x1010516
    field public static final int absListViewStyle = 16842858; // 0x101006a
    field public static final int accessibilityEventTypes = 16843648; // 0x1010380
    field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -1365,6 +1364,7 @@ package android {
    field public static final deprecated int unfocusedMonthDateColor = 16843588; // 0x1010344
    field public static final int unselectedAlpha = 16843278; // 0x101020e
    field public static final int updatePeriodMillis = 16843344; // 0x1010250
    field public static final int use32bitAbi = 16844054; // 0x1010516
    field public static final int useDefaultMargins = 16843641; // 0x1010379
    field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
    field public static final int useLevel = 16843167; // 0x101019f
+20 −15
Original line number Diff line number Diff line
@@ -337,7 +337,7 @@ public class PackageParser {

        public final boolean coreApp;
        public final boolean multiArch;
        public final String abiOverride;
        public final boolean use32bitAbi;
        public final boolean extractNativeLibs;

        public PackageLite(String codePath, ApkLite baseApk, String[] splitNames,
@@ -354,7 +354,7 @@ public class PackageParser {
            this.splitRevisionCodes = splitRevisionCodes;
            this.coreApp = baseApk.coreApp;
            this.multiArch = baseApk.multiArch;
            this.abiOverride = baseApk.abiOverride;
            this.use32bitAbi = baseApk.use32bitAbi;
            this.extractNativeLibs = baseApk.extractNativeLibs;
        }

@@ -382,12 +382,12 @@ public class PackageParser {
        public final Signature[] signatures;
        public final boolean coreApp;
        public final boolean multiArch;
        public final String abiOverride;
        public final boolean use32bitAbi;
        public final boolean extractNativeLibs;

        public ApkLite(String codePath, String packageName, String splitName, int versionCode,
                int revisionCode, int installLocation, List<VerifierInfo> verifiers,
                Signature[] signatures, boolean coreApp, boolean multiArch, String abiOverride,
                Signature[] signatures, boolean coreApp, boolean multiArch, boolean use32bitAbi,
                boolean extractNativeLibs) {
            this.codePath = codePath;
            this.packageName = packageName;
@@ -399,7 +399,7 @@ public class PackageParser {
            this.signatures = signatures;
            this.coreApp = coreApp;
            this.multiArch = multiArch;
            this.abiOverride = abiOverride;
            this.use32bitAbi = use32bitAbi;
            this.extractNativeLibs = extractNativeLibs;
        }
    }
@@ -843,8 +843,7 @@ public class PackageParser {
            }

            pkg.setCodePath(packageDir.getAbsolutePath());
            pkg.setCpuAbiOverride(lite.abiOverride);

            pkg.setUse32bitAbi(lite.use32bitAbi);
            return pkg;
        } finally {
            IoUtils.closeQuietly(assets);
@@ -875,7 +874,7 @@ public class PackageParser {
        try {
            final Package pkg = parseBaseApk(apkFile, assets, flags);
            pkg.setCodePath(apkFile.getAbsolutePath());
            pkg.setCpuAbiOverride(lite.abiOverride);
            pkg.setUse32bitAbi(lite.use32bitAbi);
            return pkg;
        } finally {
            IoUtils.closeQuietly(assets);
@@ -1380,7 +1379,7 @@ public class PackageParser {
        int revisionCode = 0;
        boolean coreApp = false;
        boolean multiArch = false;
        String abiOverride = null;
        boolean use32bitAbi = false;
        boolean extractNativeLibs = true;

        for (int i = 0; i < attrs.getAttributeCount(); i++) {
@@ -1421,8 +1420,8 @@ public class PackageParser {
                    if ("multiArch".equals(attr)) {
                        multiArch = attrs.getAttributeBooleanValue(i, false);
                    }
                    if ("abiOverride".equals(attr)) {
                        abiOverride = attrs.getAttributeValue(i);
                    if ("use32bitAbi".equals(attr)) {
                        use32bitAbi = attrs.getAttributeBooleanValue(i, false);
                    }
                    if ("extractNativeLibs".equals(attr)) {
                        extractNativeLibs = attrs.getAttributeBooleanValue(i, true);
@@ -1433,7 +1432,7 @@ public class PackageParser {

        return new ApkLite(codePath, packageSplit.first, packageSplit.second, versionCode,
                revisionCode, installLocation, verifiers, signatures, coreApp, multiArch,
                abiOverride, extractNativeLibs);
                use32bitAbi, extractNativeLibs);
    }

    /**
@@ -4740,6 +4739,12 @@ public class PackageParser {
         * and prods fields out of {@code this.applicationInfo}.
         */
        public String cpuAbiOverride;
        /**
         * The install time abi override to choose 32bit abi's when multiple abi's
         * are present. This is only meaningfull for multiarch applications.
         * The use32bitAbi attribute is ignored if cpuAbiOverride is also set.
         */
        public boolean use32bitAbi;

        public Package(String packageName) {
            this.packageName = packageName;
@@ -4872,12 +4877,12 @@ public class PackageParser {
            }
        }

        public void setCpuAbiOverride(String cpuAbiOverride) {
            this.cpuAbiOverride = cpuAbiOverride;
        public void setUse32bitAbi(bool use32bitAbi) {
            this.use32bitAbi = use32bitAbi;
            if (childPackages != null) {
                final int packageCount = childPackages.size();
                for (int i = 0; i < packageCount; i++) {
                    childPackages.get(i).cpuAbiOverride = cpuAbiOverride;
                    childPackages.get(i).use32bitAbi = use32bitAbi;
                }
            }
        }
+4 −2
Original line number Diff line number Diff line
@@ -429,8 +429,10 @@
         sets. -->
    <attr name="multiArch" format ="boolean" />

    <!-- Specify abiOverride for multiArch application. -->
    <attr name="abiOverride" />
    <!-- Specify whether the 32 bit version of the ABI should be used in a
         multiArch application. If both abioverride flag (i.e. using abi option of abd install)
         and use32bitAbi are used, then use32bit is ignored.-->
    <attr name="use32bitAbi" />

    <!-- Specify whether a component is allowed to have multiple instances
         of itself running in different processes.  Use with the activity
Loading