diff options
author | Narayan Kamath <narayan@google.com> | 2014-07-02 12:07:39 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-07-01 19:11:01 +0000 |
commit | f29131f7013dc0d6994556b95e74db608c89beb8 (patch) | |
tree | 062a34d4361d1081e737180057917075fa40483f /core/java/com | |
parent | 71420b89542352bc4924714a754b4f2691602998 (diff) | |
parent | cef0b39b9211882f59b6bfe1148e2cd247056693 (diff) | |
download | frameworks_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.java | 24 |
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); } |