ich eine 20MB-Datenbank in der apk Vermögen gespeichert haben, die bei der ersten Ausführung ist für den Einsatz extrahiert. Um dies zu tun Ich benutzeDekomprimieren von Vermögenswerten funktioniert nicht, wenn proguard mit
PackageManager pm = context.getPackageManager();
String apkFile = pm.getApplicationInfo(context.getPackageName(), 0).sourceDir;
ZipFile zipFile = new ZipFile(apkFile);
ZipEntry entry = zipFile.getEntry("assets/FILENAME");
myInput = zipFile.getInputStream(entry);
myOutput = new FileOutputStream(file);
byte[] buffer = new byte[1024*4];
int length;
int total = 0;
int counter = 1;
while ((length = myInput.read(buffer)) > 0) {
total += length;
counter++;
if (counter % 32 == 0) {
publishProgress(total);
}
myOutput.write(buffer, 0, length);
}
alles funktioniert gut, wenn ich von Eclipse (Android 2.2 Ziel) exportieren, ohne proguard zu verwenden. Als ich mit proguard exportieren, beginnt die unzip für einige Sekunden zu arbeiten (und ein paar Fortschritte Updates zu 8%), aber dann stürzt mit java.io.IOException bei java.util.zip.InflaterInputStream.read (..
)Es funktioniert auf dem Emulator, sondern stürzt auf Geräten (viele Geräte, aber ich denke immer in Android arbeitet 4, Abstürze in Android 2.2). Mein proguard.cfg ist im Grunde der Standard. Nichts, was ich versucht habe zu ändern scheint zu helfen, irgendwelche Ideen?
Warum bist du nicht mit 'GetResources(). GetAssets()' 'ein AssetManager', zu erhalten und dass bei Ihren Vermögen zu erhalten benutzen? – CommonsWare
Ich glaube, das ist auf Dateien kleiner als 1MB beschränkt, zumindest auf Android 2, während direktes Entpacken funktioniert (zumindest ohne proguard). – wordy
'AssetManager' funktioniert gut für 1 + MB-Dateien. Sie müssen jedoch eine Dateierweiterung haben, die verhindert, dass sie komprimiert werden. ['SQLiteAssetHelper'] (https://github.com/jgilfelt/android-sqlite-asset-helper), zum Beispiel, funktioniert sehr gut mit 1 + MB-Dateien, durch das einfache Mittel, sie ein ZIP-Archiv in der' Assets/'Projektordner. – CommonsWare