Czy istnieje sposób na uzyskanie katalogu aplikacji, aby zapisać prywatne dane do pliku dla mojej aplikacji bezpośrednio z NDK? Innymi słowy, potrzebuję odpowiednika funkcji Java mContext.getFilesDir().

Zauważyłem, że inne posty, takie jak ten: Plik zapisu Android NDK

Wspomnij, jakie jest „zwykłe” miejsce tego katalogu. Ale żeby było to poprawne we wszystkich wersjach i na wszystkich urządzeniach, z pewnością konieczne jest równoważne wywołanie systemowe.

Obecnie używam NativeActivity i w ogóle nie korzystam z Javy.

Dziękuję za Twój czas.

13
DJPJ 8 czerwiec 2011, 13:49

2 odpowiedzi

Najlepsza odpowiedź

Jeśli używasz NativeActivity, masz dostęp z kodu natywnego do instancji ANativeActivity (patrz <ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.h), która ma członków internalDataPath i externalDataPath.

6
frogatto 16 październik 2019, 09:07
1
Dziękuję, dokładnie tego szukałem. Niestety zarówno internalDataPath, jak i externalDataPath mają wartość NULL w czasie wykonywania..? Jakieś pomysły? Dzieje się tak, gdy działa na urządzeniu Google Nexus S.
 – 
DJPJ
9 czerwiec 2011, 12:45
1
Ok zgodnie z tym linkiem: groups.google.com/ group/android-ndk/browse_thread/thread/… jest to znany błąd w Androidzie 2.3.xi naprawiony w wersji 3.0. Świetny! Więc będę musiał przyjrzeć się implementacji jni tylko w tym celu...
 – 
DJPJ
9 czerwiec 2011, 13:09
Poszedłem tą samą drogą i po przyjrzeniu się rozpowszechnianiu zainstalowanych wersji systemu operacyjnego zdałem sobie sprawę, że po prostu nie mogę zignorować v2.1. Tak więc NativeActivity stał się nieistotny. Jak się okazuje, zaimplementowanie pełnej podkładki JNI jest dość proste i ma tę dodatkową zaletę, że za każdym razem, gdy znajdziesz coś, co NativeActivity pominęło, jesteś już przygotowany do dodania tego.
 – 
jimkberry
9 czerwiec 2011, 17:09

Mam niestandardową klasę pomocniczą do uzyskiwania dostępu do różnych ścieżek, dla katalogu danych robię to:

  1. Przeczytaj /proc/self/cmdline lub /proc/**MyPID**/cmdline
  2. Dołącz wyniki z nr 1 do /data/data/

Przykładowe wyniki:

/data/data/com.yourcompany.yourproduct/
9
frogatto 16 październik 2019, 09:28
3
Dla tych, którzy zastanawiają się, jak zdobyć MyPID, możesz po prostu zastąpić to "self", tj. przeczytać /proc/self/cmdline, a to zaoszczędzi ci trochę dodatkowych kłopotów.
 – 
MultiColourPixel
2 listopad 2016, 01:42
Dobra uwaga, zaktualizowałem odpowiedź, aby pokazać oba.
 – 
NuSkooler
2 listopad 2016, 20:05