summaryrefslogtreecommitdiffstats
path: root/core/java/com
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2014-07-02 12:07:39 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-07-01 19:11:01 +0000
commitf29131f7013dc0d6994556b95e74db608c89beb8 (patch)
tree062a34d4361d1081e737180057917075fa40483f /core/java/com
parent71420b89542352bc4924714a754b4f2691602998 (diff)
parentcef0b39b9211882f59b6bfe1148e2cd247056693 (diff)
downloadframeworks_base-f29131f7013dc0d6994556b95e74db608c89beb8.zip
frameworks_base-f29131f7013dc0d6994556b95e74db608c89beb8.tar.gz
frameworks_base-f29131f7013dc0d6994556b95e74db608c89beb8.tar.bz2
Merge "Fix native crashes when APKs can't be opened."
Diffstat (limited to 'core/java/com')
-rw-r--r--core/java/com/android/internal/content/NativeLibraryHelper.java24
1 files changed, 17 insertions, 7 deletions
diff --git a/core/java/com/android/internal/content/NativeLibraryHelper.java b/core/java/com/android/internal/content/NativeLibraryHelper.java
index dab3aff..832829d 100644
--- a/core/java/com/android/internal/content/NativeLibraryHelper.java
+++ b/core/java/com/android/internal/content/NativeLibraryHelper.java
@@ -19,6 +19,7 @@ package com.android.internal.content;
import android.content.pm.PackageManager;
import android.util.Slog;
+import java.io.Closeable;
import java.io.File;
import java.io.IOException;
@@ -39,20 +40,29 @@ public class NativeLibraryHelper {
*
* @hide
*/
- public static class ApkHandle {
+ public static class ApkHandle implements Closeable {
final String apkPath;
final long apkHandle;
- public ApkHandle(String path) {
- apkPath = path;
- apkHandle = nativeOpenApk(apkPath);
+ public static ApkHandle create(String path) throws IOException {
+ final long handle = nativeOpenApk(path);
+ if (handle == 0) {
+ throw new IOException("Unable to open APK: " + path);
+ }
+
+ return new ApkHandle(path, handle);
+ }
+
+ public static ApkHandle create(File path) throws IOException {
+ return create(path.getAbsolutePath());
}
- public ApkHandle(File apkFile) {
- apkPath = apkFile.getPath();
- apkHandle = nativeOpenApk(apkPath);
+ private ApkHandle(String apkPath, long apkHandle) {
+ this.apkPath = apkPath;
+ this.apkHandle = apkHandle;
}
+ @Override
public void close() {
nativeClose(apkHandle);
}