From 2d291d89f957495917071282ac0afce9b65c5e26 Mon Sep 17 00:00:00 2001 From: Selim Gurun Date: Fri, 5 Feb 2016 17:50:53 -0800 Subject: [PATCH] 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 --- api/current.txt | 2 +- api/system-current.txt | 2 +- api/test-current.txt | 2 +- core/java/android/content/pm/PackageParser.java | 35 ++++++++++++---------- core/res/res/values/attrs_manifest.xml | 6 ++-- core/res/res/values/public.xml | 2 +- .../android/server/pm/PackageManagerService.java | 15 +++++----- 7 files changed, 36 insertions(+), 28 deletions(-) diff --git a/api/current.txt b/api/current.txt index 649d7fa79242..bd239849839b 100644 --- a/api/current.txt +++ b/api/current.txt @@ -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 diff --git a/api/system-current.txt b/api/system-current.txt index 3c3054eaa5b6..8e798baf2794 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -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 diff --git a/api/test-current.txt b/api/test-current.txt index 8fbcff9218f1..f5c0669e8923 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -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 diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 72ace1583b4a..04f130a15ac1 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -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 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; } } } diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 3a5336cd05f1..1496d0926dc6 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -429,8 +429,10 @@ sets. --> - - + +