2011-06-08 25 views
10

有沒有辦法讓應用程序的目錄直接從NDK將私人數據保存到我的應用程序的文件中?換句話說,我需要一個等效的Java函數mContext.getFilesDir()。來自NDK的GetFilesDir()?

我注意到,其他職位如這一個: Android NDK Write File

提到什麼是「平常」的地方這個目錄是。但是爲了在所有版本和所有設備上都正確,系統調用肯定是必要的。

我目前使用的是NativeActivity,根本沒有Java。

謝謝你的時間。

回答

5

如果您正在使用NativeActivity的,那麼你必須從本地代碼到ANativeActivity實例(見/平臺/ Android的9接入/弓臂/ usr/include目錄/ android/native_activity.h),它有internalDataPath和externalDataPath成員。

+1

謝謝,這正是我正在尋找的。不幸的是,internalDataPath和externalDataPath在運行時都是NULL ..?任何想法?這是在谷歌連線S設備上運行的時候 – DJPJ 2011-06-09 08:45:09

+1

好的根據這個鏈接:http://groups.google.com/group/android-ndk/browse_thread/thread/e250fc392fb0e145?pli=1它是一個已知的bug與android 2.3.x,它固定在3.0。太棒了!所以我需要考慮實施jni只是爲了這個...... – DJPJ 2011-06-09 09:09:57

+0

我沿着同樣的路線走下去,在看到已安裝的設備操作系統版本的傳播後,我意識到,不會忽略v2.1。所以NativeActivity成爲一個非問題。事實證明,實現一個完整的JNI Shim非常簡單,並且具有額外的優勢,無論您何時發現NativeActivity已遺漏的某些內容,您都已經設置好了添加它。 – jimkberry 2011-06-09 13:09:06

5

我有自定義的助手類用於訪問不同的路徑,對於數據目錄我這樣做:

  1. 的/ proc /自/ CMDLINE的/ proc/MyPID/CMDLINE
  2. 追加從#1的結果/數據/數據/

實施例的結果:
/data/data/com.yourcompany.yourproduct/

+0

對於那些想知道如何獲得'MyPID'的人,你可以簡單地用「self」代替,即讀取'/ proc/self/cmdline',這會爲你節省一點額外的麻煩。 – MultiColourPixel 2016-11-01 22:42:18

+0

@MultiColourPixel好點,我已經更新了答案,以顯示兩者。 – NuSkooler 2016-11-02 17:05:50