private bool IsApk64Bit(string apkFilename) { UpdateStatus("Checking if APK is 64-bit..."); try { using (var apk = new ZipFileProvider(apkFilename, FileCacheMode.None, true, QuestomAssets.Utils.FileUtils.GetTempDirectory())) { if (apk.DirectoryExists(LIBMODLOADER64_TARGET_FILE.GetDirectoryFwdSlash())) { UpdateStatus("APK is 64 bit"); return(true); } if (apk.DirectoryExists(LIBMODLOADER_TARGET_FILE.GetDirectoryFwdSlash())) { UpdateStatus("APK is 32 bit"); return(false); } UpdateStatus("Can't find a libs folder for either 32 or 64 bit..."); throw new ModException("Unable to find library folder to determine 32 or 64 bit."); } } catch (Exception ex) { Log.LogErr("Error determining if APK is 64 bit!", ex); UpdateStatus("Unable to determine if APK is 32 or 64 bit!"); throw new ModException("Error determining if APK is 64 bit!", ex); } }
private void AddModLoaderToApk(string apkFilename) { UpdateStatus("Adding the libmodloader.so file to the APK..."); try { using (var apk = new ZipFileProvider(apkFilename, FileCacheMode.None, false, QuestomAssets.Utils.FileUtils.GetTempDirectory())) { using (var resStream = _context.Resources.OpenRawResource(Resource.Raw.libmodloader)) { using (var resStream64 = _context.Resources.OpenRawResource(Resource.Raw.libmodloader64)) { if (apk.DirectoryExists(LIBMODLOADER_TARGET_FILE.GetDirectoryFwdSlash())) { apk.QueueWriteStream(LIBMODLOADER_TARGET_FILE, resStream, true, true); } if (apk.DirectoryExists(LIBMODLOADER64_TARGET_FILE.GetDirectoryFwdSlash())) { apk.QueueWriteStream(LIBMODLOADER64_TARGET_FILE, resStream64, true, true); } apk.Save(); } } } } catch (Exception ex) { Log.LogErr("Error adding libmodloader.so to APK", ex); UpdateStatus("Error adding modloader to the APK!"); throw new ModException("Error adding libmodloader.so to APK", ex); } }