Loading api/current.txt +4 −2 Original line number Diff line number Diff line Loading @@ -547,6 +547,7 @@ package android { field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16843990; // 0x10104d6 field public static final int factor = 16843219; // 0x10101d3 field public static final int fadeDuration = 16843384; // 0x1010278 field public static final int fadeEnabled = 16843390; // 0x101027e Loading Loading @@ -8366,6 +8367,7 @@ package android.content.pm { field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 field public static final int FLAG_DEBUGGABLE = 2; // 0x2 field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000 field public static final int FLAG_EXTRACT_NATIVE_LIBS = 268435456; // 0x10000000 field public static final int FLAG_FACTORY_TEST = 16; // 0x10 field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000 field public static final int FLAG_HAS_CODE = 4; // 0x4 Loading Loading @@ -17513,7 +17515,7 @@ package android.net.http { method public static android.net.http.HttpResponseCache getInstalled(); method public int getNetworkCount(); method public int getRequestCount(); method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public static synchronized android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public long maxSize(); method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; method public long size(); Loading Loading @@ -41517,7 +41519,7 @@ package java.lang { method public static double nextUp(double); method public static float nextUp(float); method public static double pow(double, double); method public static synchronized double random(); method public static double random(); method public static double rint(double); method public static long round(double); method public static int round(float); api/system-current.txt +4 −2 Original line number Diff line number Diff line Loading @@ -617,6 +617,7 @@ package android { field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16843990; // 0x10104d6 field public static final int factor = 16843219; // 0x10101d3 field public static final int fadeDuration = 16843384; // 0x1010278 field public static final int fadeEnabled = 16843390; // 0x101027e Loading Loading @@ -8614,6 +8615,7 @@ package android.content.pm { field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 field public static final int FLAG_DEBUGGABLE = 2; // 0x2 field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000 field public static final int FLAG_EXTRACT_NATIVE_LIBS = 268435456; // 0x10000000 field public static final int FLAG_FACTORY_TEST = 16; // 0x10 field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000 field public static final int FLAG_HAS_CODE = 4; // 0x4 Loading Loading @@ -18841,7 +18843,7 @@ package android.net.http { method public static android.net.http.HttpResponseCache getInstalled(); method public int getNetworkCount(); method public int getRequestCount(); method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public static synchronized android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public long maxSize(); method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; method public long size(); Loading Loading @@ -44055,7 +44057,7 @@ package java.lang { method public static double nextUp(double); method public static float nextUp(float); method public static double pow(double, double); method public static synchronized double random(); method public static double random(); method public static double rint(double); method public static long round(double); method public static int round(float); core/java/android/content/pm/ApplicationInfo.java +5 −0 Original line number Diff line number Diff line Loading @@ -345,6 +345,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 1<<27; /** * When set installer extracts native libs from .apk files. */ public static final int FLAG_EXTRACT_NATIVE_LIBS = 1<<28; /** * Value for {@link #flags}: true if code from this application will need to be * loaded into other applications' processes. On devices that support multiple Loading core/java/android/content/pm/PackageParser.java +18 −3 Original line number Diff line number Diff line Loading @@ -268,6 +268,7 @@ public class PackageParser { public final boolean coreApp; public final boolean multiArch; public final boolean extractNativeLibs; public PackageLite(String codePath, ApkLite baseApk, String[] splitNames, String[] splitCodePaths, int[] splitRevisionCodes) { Loading @@ -283,6 +284,7 @@ public class PackageParser { this.splitRevisionCodes = splitRevisionCodes; this.coreApp = baseApk.coreApp; this.multiArch = baseApk.multiArch; this.extractNativeLibs = baseApk.extractNativeLibs; } public List<String> getAllCodePaths() { Loading @@ -309,10 +311,12 @@ public class PackageParser { public final Signature[] signatures; public final boolean coreApp; public final boolean multiArch; 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) { Signature[] signatures, boolean coreApp, boolean multiArch, boolean extractNativeLibs) { this.codePath = codePath; this.packageName = packageName; this.splitName = splitName; Loading @@ -323,6 +327,7 @@ public class PackageParser { this.signatures = signatures; this.coreApp = coreApp; this.multiArch = multiArch; this.extractNativeLibs = extractNativeLibs; } } Loading Loading @@ -1269,6 +1274,7 @@ public class PackageParser { int revisionCode = 0; boolean coreApp = false; boolean multiArch = false; boolean extractNativeLibs = true; for (int i = 0; i < attrs.getAttributeCount(); i++) { final String attr = attrs.getAttributeName(i); Loading Loading @@ -1307,14 +1313,17 @@ public class PackageParser { final String attr = attrs.getAttributeName(i); if ("multiArch".equals(attr)) { multiArch = attrs.getAttributeBooleanValue(i, false); break; } if ("extractNativeLibs".equals(attr)) { extractNativeLibs = attrs.getAttributeBooleanValue(i, true); } } } } return new ApkLite(codePath, packageSplit.first, packageSplit.second, versionCode, revisionCode, installLocation, verifiers, signatures, coreApp, multiArch); revisionCode, installLocation, verifiers, signatures, coreApp, multiArch, extractNativeLibs); } /** Loading Loading @@ -2567,6 +2576,12 @@ public class PackageParser { ai.flags |= ApplicationInfo.FLAG_MULTIARCH; } if (sa.getBoolean( com.android.internal.R.styleable.AndroidManifestApplication_extractNativeLibs, true)) { ai.flags |= ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS; } String str; str = sa.getNonConfigurationString( com.android.internal.R.styleable.AndroidManifestApplication_permission, 0); Loading core/java/com/android/internal/content/NativeLibraryHelper.java +21 −10 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.content.pm.PackageParser.PackageLite; import android.content.pm.PackageParser.PackageParserException; import android.os.Build; import android.os.SELinux; import android.os.SystemProperties; import android.system.ErrnoException; import android.system.Os; import android.util.Slog; Loading Loading @@ -74,6 +75,7 @@ public class NativeLibraryHelper { final long[] apkHandles; final boolean multiArch; final boolean extractNativeLibs; public static Handle create(File packageFile) throws IOException { try { Loading @@ -86,14 +88,16 @@ public class NativeLibraryHelper { public static Handle create(Package pkg) throws IOException { return create(pkg.getAllCodePaths(), (pkg.applicationInfo.flags & ApplicationInfo.FLAG_MULTIARCH) != 0); (pkg.applicationInfo.flags & ApplicationInfo.FLAG_MULTIARCH) != 0, (pkg.applicationInfo.flags & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) != 0); } public static Handle create(PackageLite lite) throws IOException { return create(lite.getAllCodePaths(), lite.multiArch); return create(lite.getAllCodePaths(), lite.multiArch, lite.extractNativeLibs); } private static Handle create(List<String> codePaths, boolean multiArch) throws IOException { private static Handle create(List<String> codePaths, boolean multiArch, boolean extractNativeLibs) throws IOException { final int size = codePaths.size(); final long[] apkHandles = new long[size]; for (int i = 0; i < size; i++) { Loading @@ -108,12 +112,13 @@ public class NativeLibraryHelper { } } return new Handle(apkHandles, multiArch); return new Handle(apkHandles, multiArch, extractNativeLibs); } Handle(long[] apkHandles, boolean multiArch) { Handle(long[] apkHandles, boolean multiArch, boolean extractNativeLibs) { this.apkHandles = apkHandles; this.multiArch = multiArch; this.extractNativeLibs = extractNativeLibs; mGuard.open("close"); } Loading Loading @@ -146,8 +151,8 @@ public class NativeLibraryHelper { private static native long nativeSumNativeBinaries(long handle, String cpuAbi); private native static int nativeCopyNativeBinaries(long handle, String sharedLibraryPath, String abiToCopy); private native static int nativeCopyNativeBinaries(long handle, String sharedLibraryPath, String abiToCopy, boolean extractNativeLibs, boolean hasNativeBridge); private static long sumNativeBinaries(Handle handle, String abi) { long sum = 0; Loading @@ -167,7 +172,8 @@ public class NativeLibraryHelper { */ public static int copyNativeBinaries(Handle handle, File sharedLibraryDir, String abi) { for (long apkHandle : handle.apkHandles) { int res = nativeCopyNativeBinaries(apkHandle, sharedLibraryDir.getPath(), abi); int res = nativeCopyNativeBinaries(apkHandle, sharedLibraryDir.getPath(), abi, handle.extractNativeLibs, HAS_NATIVE_BRIDGE); if (res != INSTALL_SUCCEEDED) { return res; } Loading Loading @@ -218,7 +224,8 @@ public class NativeLibraryHelper { /** * Remove the native binaries of a given package. This deletes the files */ public static void removeNativeBinariesFromDirLI(File nativeLibraryRoot, boolean deleteRootDir) { public static void removeNativeBinariesFromDirLI(File nativeLibraryRoot, boolean deleteRootDir) { if (DEBUG_NATIVE) { Slog.w(TAG, "Deleting native binaries from: " + nativeLibraryRoot.getPath()); } Loading Loading @@ -247,7 +254,8 @@ public class NativeLibraryHelper { // asked to or this will prevent installation of future updates. if (deleteRootDir) { if (!nativeLibraryRoot.delete()) { Slog.w(TAG, "Could not delete native binary directory: " + nativeLibraryRoot.getPath()); Slog.w(TAG, "Could not delete native binary directory: " + nativeLibraryRoot.getPath()); } } } Loading Loading @@ -416,6 +424,9 @@ public class NativeLibraryHelper { // We don't care about the other return values for now. private static final int BITCODE_PRESENT = 1; private static final boolean HAS_NATIVE_BRIDGE = !"0".equals(SystemProperties.get("ro.dalvik.vm.native.bridge", "0")); private static native int hasRenderscriptBitcode(long apkHandle); public static boolean hasRenderscriptBitcode(Handle handle) throws IOException { Loading Loading
api/current.txt +4 −2 Original line number Diff line number Diff line Loading @@ -547,6 +547,7 @@ package android { field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16843990; // 0x10104d6 field public static final int factor = 16843219; // 0x10101d3 field public static final int fadeDuration = 16843384; // 0x1010278 field public static final int fadeEnabled = 16843390; // 0x101027e Loading Loading @@ -8366,6 +8367,7 @@ package android.content.pm { field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 field public static final int FLAG_DEBUGGABLE = 2; // 0x2 field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000 field public static final int FLAG_EXTRACT_NATIVE_LIBS = 268435456; // 0x10000000 field public static final int FLAG_FACTORY_TEST = 16; // 0x10 field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000 field public static final int FLAG_HAS_CODE = 4; // 0x4 Loading Loading @@ -17513,7 +17515,7 @@ package android.net.http { method public static android.net.http.HttpResponseCache getInstalled(); method public int getNetworkCount(); method public int getRequestCount(); method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public static synchronized android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public long maxSize(); method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; method public long size(); Loading Loading @@ -41517,7 +41519,7 @@ package java.lang { method public static double nextUp(double); method public static float nextUp(float); method public static double pow(double, double); method public static synchronized double random(); method public static double random(); method public static double rint(double); method public static long round(double); method public static int round(float);
api/system-current.txt +4 −2 Original line number Diff line number Diff line Loading @@ -617,6 +617,7 @@ package android { field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 field public static final int exported = 16842768; // 0x1010010 field public static final int extraTension = 16843371; // 0x101026b field public static final int extractNativeLibs = 16843990; // 0x10104d6 field public static final int factor = 16843219; // 0x10101d3 field public static final int fadeDuration = 16843384; // 0x1010278 field public static final int fadeEnabled = 16843390; // 0x101027e Loading Loading @@ -8614,6 +8615,7 @@ package android.content.pm { field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 field public static final int FLAG_DEBUGGABLE = 2; // 0x2 field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000 field public static final int FLAG_EXTRACT_NATIVE_LIBS = 268435456; // 0x10000000 field public static final int FLAG_FACTORY_TEST = 16; // 0x10 field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000 field public static final int FLAG_HAS_CODE = 4; // 0x4 Loading Loading @@ -18841,7 +18843,7 @@ package android.net.http { method public static android.net.http.HttpResponseCache getInstalled(); method public int getNetworkCount(); method public int getRequestCount(); method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public static synchronized android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; method public long maxSize(); method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; method public long size(); Loading Loading @@ -44055,7 +44057,7 @@ package java.lang { method public static double nextUp(double); method public static float nextUp(float); method public static double pow(double, double); method public static synchronized double random(); method public static double random(); method public static double rint(double); method public static long round(double); method public static int round(float);
core/java/android/content/pm/ApplicationInfo.java +5 −0 Original line number Diff line number Diff line Loading @@ -345,6 +345,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 1<<27; /** * When set installer extracts native libs from .apk files. */ public static final int FLAG_EXTRACT_NATIVE_LIBS = 1<<28; /** * Value for {@link #flags}: true if code from this application will need to be * loaded into other applications' processes. On devices that support multiple Loading
core/java/android/content/pm/PackageParser.java +18 −3 Original line number Diff line number Diff line Loading @@ -268,6 +268,7 @@ public class PackageParser { public final boolean coreApp; public final boolean multiArch; public final boolean extractNativeLibs; public PackageLite(String codePath, ApkLite baseApk, String[] splitNames, String[] splitCodePaths, int[] splitRevisionCodes) { Loading @@ -283,6 +284,7 @@ public class PackageParser { this.splitRevisionCodes = splitRevisionCodes; this.coreApp = baseApk.coreApp; this.multiArch = baseApk.multiArch; this.extractNativeLibs = baseApk.extractNativeLibs; } public List<String> getAllCodePaths() { Loading @@ -309,10 +311,12 @@ public class PackageParser { public final Signature[] signatures; public final boolean coreApp; public final boolean multiArch; 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) { Signature[] signatures, boolean coreApp, boolean multiArch, boolean extractNativeLibs) { this.codePath = codePath; this.packageName = packageName; this.splitName = splitName; Loading @@ -323,6 +327,7 @@ public class PackageParser { this.signatures = signatures; this.coreApp = coreApp; this.multiArch = multiArch; this.extractNativeLibs = extractNativeLibs; } } Loading Loading @@ -1269,6 +1274,7 @@ public class PackageParser { int revisionCode = 0; boolean coreApp = false; boolean multiArch = false; boolean extractNativeLibs = true; for (int i = 0; i < attrs.getAttributeCount(); i++) { final String attr = attrs.getAttributeName(i); Loading Loading @@ -1307,14 +1313,17 @@ public class PackageParser { final String attr = attrs.getAttributeName(i); if ("multiArch".equals(attr)) { multiArch = attrs.getAttributeBooleanValue(i, false); break; } if ("extractNativeLibs".equals(attr)) { extractNativeLibs = attrs.getAttributeBooleanValue(i, true); } } } } return new ApkLite(codePath, packageSplit.first, packageSplit.second, versionCode, revisionCode, installLocation, verifiers, signatures, coreApp, multiArch); revisionCode, installLocation, verifiers, signatures, coreApp, multiArch, extractNativeLibs); } /** Loading Loading @@ -2567,6 +2576,12 @@ public class PackageParser { ai.flags |= ApplicationInfo.FLAG_MULTIARCH; } if (sa.getBoolean( com.android.internal.R.styleable.AndroidManifestApplication_extractNativeLibs, true)) { ai.flags |= ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS; } String str; str = sa.getNonConfigurationString( com.android.internal.R.styleable.AndroidManifestApplication_permission, 0); Loading
core/java/com/android/internal/content/NativeLibraryHelper.java +21 −10 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.content.pm.PackageParser.PackageLite; import android.content.pm.PackageParser.PackageParserException; import android.os.Build; import android.os.SELinux; import android.os.SystemProperties; import android.system.ErrnoException; import android.system.Os; import android.util.Slog; Loading Loading @@ -74,6 +75,7 @@ public class NativeLibraryHelper { final long[] apkHandles; final boolean multiArch; final boolean extractNativeLibs; public static Handle create(File packageFile) throws IOException { try { Loading @@ -86,14 +88,16 @@ public class NativeLibraryHelper { public static Handle create(Package pkg) throws IOException { return create(pkg.getAllCodePaths(), (pkg.applicationInfo.flags & ApplicationInfo.FLAG_MULTIARCH) != 0); (pkg.applicationInfo.flags & ApplicationInfo.FLAG_MULTIARCH) != 0, (pkg.applicationInfo.flags & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) != 0); } public static Handle create(PackageLite lite) throws IOException { return create(lite.getAllCodePaths(), lite.multiArch); return create(lite.getAllCodePaths(), lite.multiArch, lite.extractNativeLibs); } private static Handle create(List<String> codePaths, boolean multiArch) throws IOException { private static Handle create(List<String> codePaths, boolean multiArch, boolean extractNativeLibs) throws IOException { final int size = codePaths.size(); final long[] apkHandles = new long[size]; for (int i = 0; i < size; i++) { Loading @@ -108,12 +112,13 @@ public class NativeLibraryHelper { } } return new Handle(apkHandles, multiArch); return new Handle(apkHandles, multiArch, extractNativeLibs); } Handle(long[] apkHandles, boolean multiArch) { Handle(long[] apkHandles, boolean multiArch, boolean extractNativeLibs) { this.apkHandles = apkHandles; this.multiArch = multiArch; this.extractNativeLibs = extractNativeLibs; mGuard.open("close"); } Loading Loading @@ -146,8 +151,8 @@ public class NativeLibraryHelper { private static native long nativeSumNativeBinaries(long handle, String cpuAbi); private native static int nativeCopyNativeBinaries(long handle, String sharedLibraryPath, String abiToCopy); private native static int nativeCopyNativeBinaries(long handle, String sharedLibraryPath, String abiToCopy, boolean extractNativeLibs, boolean hasNativeBridge); private static long sumNativeBinaries(Handle handle, String abi) { long sum = 0; Loading @@ -167,7 +172,8 @@ public class NativeLibraryHelper { */ public static int copyNativeBinaries(Handle handle, File sharedLibraryDir, String abi) { for (long apkHandle : handle.apkHandles) { int res = nativeCopyNativeBinaries(apkHandle, sharedLibraryDir.getPath(), abi); int res = nativeCopyNativeBinaries(apkHandle, sharedLibraryDir.getPath(), abi, handle.extractNativeLibs, HAS_NATIVE_BRIDGE); if (res != INSTALL_SUCCEEDED) { return res; } Loading Loading @@ -218,7 +224,8 @@ public class NativeLibraryHelper { /** * Remove the native binaries of a given package. This deletes the files */ public static void removeNativeBinariesFromDirLI(File nativeLibraryRoot, boolean deleteRootDir) { public static void removeNativeBinariesFromDirLI(File nativeLibraryRoot, boolean deleteRootDir) { if (DEBUG_NATIVE) { Slog.w(TAG, "Deleting native binaries from: " + nativeLibraryRoot.getPath()); } Loading Loading @@ -247,7 +254,8 @@ public class NativeLibraryHelper { // asked to or this will prevent installation of future updates. if (deleteRootDir) { if (!nativeLibraryRoot.delete()) { Slog.w(TAG, "Could not delete native binary directory: " + nativeLibraryRoot.getPath()); Slog.w(TAG, "Could not delete native binary directory: " + nativeLibraryRoot.getPath()); } } } Loading Loading @@ -416,6 +424,9 @@ public class NativeLibraryHelper { // We don't care about the other return values for now. private static final int BITCODE_PRESENT = 1; private static final boolean HAS_NATIVE_BRIDGE = !"0".equals(SystemProperties.get("ro.dalvik.vm.native.bridge", "0")); private static native int hasRenderscriptBitcode(long apkHandle); public static boolean hasRenderscriptBitcode(Handle handle) throws IOException { Loading