access google apk library through reflection apk
authorstopiccot <alexey.petruchik@gmail.com>
Wed, 30 Apr 2014 22:51:29 +0300
branchapk
changeset 8898 0f1bfc218f62
parent 8897 fff9c0b9f1fb
child 8899 7f19291e720c
access google apk library through reflection
android-project/src/org/libsdl/app/SDLActivity.java
--- a/android-project/src/org/libsdl/app/SDLActivity.java	Wed Apr 23 03:42:32 2014 +0300
+++ b/android-project/src/org/libsdl/app/SDLActivity.java	Wed Apr 30 22:51:29 2014 +0300
@@ -7,6 +7,7 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.lang.reflect.Method;
 
 import android.app.*;
 import android.content.*;
@@ -22,9 +23,6 @@
 import android.media.*;
 import android.hardware.*;
 
-import com.android.vending.expansion.zipfile.APKExpansionSupport;
-import com.android.vending.expansion.zipfile.ZipResourceFile;
-
 /**
     SDL Activity
 */
@@ -502,7 +500,12 @@
     }
 
     // APK extension files support
-    private ZipResourceFile expansionFile = null;
+
+    /** com.android.vending.expansion.zipfile.ZipResourceFile object or null. */
+    private Object expansionFile;
+
+    /** com.android.vending.expansion.zipfile.ZipResourceFile's getInputStream() or null. */
+    private Method expansionFileMethod;
 
     public InputStream openAPKExtensionInputStream(String fileName) throws IOException {
         // Get a ZipResourceFile representing a merger of both the main and patch files
@@ -510,11 +513,28 @@
             Integer mainVersion = Integer.parseInt(nativeGetHint("SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"));
             Integer patchVersion = Integer.parseInt(nativeGetHint("SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"));
 
-            expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this, mainVersion, patchVersion);
+            try {
+                expansionFile = Class.forName("com.android.vending.expansion.zipfile.APKExpansionSupport")
+                    .getMethod("getAPKExpansionZipFile", Context.class, int.class, int.class)
+                    .invoke(null, this, mainVersion, patchVersion);
+
+                expansionFileMethod = expansionFile.getClass()
+                    .getMethod("getInputStream", String.class);
+            } catch (Exception ex) {
+                ex.printStackTrace();
+                expansionFile = null;
+                expansionFileMethod = null;
+            }
         }
 
         // Get an input stream for a known file inside the expansion file ZIPs
-        InputStream fileStream = expansionFile.getInputStream(fileName);
+        InputStream fileStream;
+        try {
+            fileStream = (InputStream)expansionFileMethod.invoke(expansionFile, fileName);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            fileStream = null;
+        }
 
         if (fileStream == null) {
             throw new IOException();