Ich benutze OBB, um meine Daten zu halten und müssen Android NDK verwenden, um auf die Daten zuzugreifen. Ich kann jedoch nicht scheinen, die OBB-Datei zu mounten, um Daten abzurufen. Ich benenne meinen Obb nach dem Schema nach APK Expansion Files documentation.Problem beim Lesen von OBB-Datei Inhalt mit Android NDK
z.B. main.1.com.example.native_activity.obb
ich es dann unter /data/Android/obb/com.example.native_activity Ordner abgelegt, wie oben durch die Online-doc vorgeschlagen.
jedoch durch den folgenden Code verwenden, kann ich nicht die OBB montieren machen:
AStorageManager* man = AStorageManager_new();
char* data = malloc(256);
AStorageManager_mountObb(man, "main.1.com.example.native_activity.obb", "somekey", my_obbCallbackFunc, data);
char* obbPath = AStorageManager_getMountedObbPath(man, "main.1.com.example.native_activity.obb");
LOGI("mounted path: %s", obbPath);
free(data);
data = NULL;
AStorageManager_delete(man);
man = NULL;
Die obbPath
drehte immer leer sein wird. Ich weiß nicht, wie man einen richtigen Schlüssel bekommt, also war es nur eine Randomisierung.
UPDATE:
korrigierte ich zwei Fragen von meiner Seite.
Zunächst wurde die obb-Datei nicht mit dem Android-Jobb-Tool erstellt, sondern aus einer Zip-Datei umbenannt. So neu erstellt ich die Datei mit:
jobb -d assets/ -o obb/main.1.com.example.native_activity.obb -k mykey -pn com.example.native_activity -pv 11
und schob es unter
/sdcard/Android/obb/com.example.native_activity/
habe ich dann den Schlüssel und eine Rückruffunktion im mountObb Anruf mit Code wie folgt:
char obbPath[256];
sprintf(obbPath, "/sdcard/Android/obb/com.example.native_activity/main.1.com.example.native_activity.obb");
struct stat sts;
if(stat(obbPath, &sts) == -1)
{
LOGI("File not found: %s\n", obbPath);
}
else
{
LOGI("File found: %s", obbPath);
}
AStorageManager* man = AStorageManager_new();
char* data = malloc(256);
AStorageManager_mountObb(man, obbPath, "mykey", my_obbCallbackFunc, data);
char* mntPath = AStorageManager_getMountedObbPath(man, obbPath);
int isMounted = AStorageManager_isObbMounted(man, obbPath);
LOGI("mounted path: %s, already mounted?: %d", mntPath, isMounted);
free(data);
data = NULL;
AStorageManager_delete(man);
man = NULL;
return 1;
und der Rückruf
void my_obbCallbackFunc(const char* filename, const int32_t state, void* data)
{
LOGI("my_obbCallbackFunc: %d", state);
}
Die Logcat Ausgabe Ich habe:
08-09 08:45:15.960: I/native-activity(9166): Touched screen.
08-09 08:45:15.960: I/native-activity(9166): File found: /sdcard/Android/obb/com.example.native_activity/main.1.com.example.native_activity.obb
08-09 08:45:15.960: E/Parcel(9166): Reading a NULL string not supported here.
08-09 08:45:15.960: I/native-activity(9166): mounted path: , already mounted?: 0
08-09 08:45:15.970: I/native-activity(9166): Touched screen.
08-09 08:45:15.970: I/native-activity(9166): File found: /sdcard/Android/obb/com.example.native_activity/main.1.com.example.native_activity.obb
08-09 08:45:15.970: E/Parcel(9166): Reading a NULL string not supported here.
08-09 08:45:15.970: I/native-activity(9166): mounted path: , already mounted?: 0
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 1
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 24
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 24
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 24
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 24
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 24
08-09 08:45:16.030: I/native-activity(9166): my_obbCallbackFunc: 24
Nach android-ndk-r8d/platforms/android-9/arch-arm/usr/include/android/storage_manager.h
, der Fehlercode aus dem Callback bedeutet
AOBB_STATE_MOUNTED = 1,
AOBB_STATE_ERROR_ALREADY_MOUNTED = 24,
Dies ist jedoch die logcat widerspricht aus dem Rückgabewert von AStorageManager_isObbMounted() -Aufruf drucken, Das liest, dass es noch nicht gemountet ist.
Ich bin total verwirrt.
Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu schreiben. Ich habe gerade Probleme mit .obbs. Das war sehr wertvoll. Für andere Leute, die dies lesen, kann ich hinzufügen, dass das Jobb-Tool Fat Full-Fehler gibt, wenn Sie zu wenige Dateien in einem Verzeichnis haben. Puh, mit Obbs zu arbeiten war eine Hölle. –
Eine Anmerkung, es scheint, Sie nehmen an, dass die Callbacks synchron ausgeführt werden, aber das Mounten eines Obb ist (so weit ich sehe) eine asynchrone Operation. Könnte das der Grund sein, dass du einen leeren Weg hast? (Momentan, ich habe anscheinend keine Callbacks, auch ist mein Obb nicht geladen ... Debugging ...) –