2017-09-14 68 views
0

問題

我想知道如何從本機代碼製作Android資產文件夾的文件層次結構。我正在使用AAssetManager_openDir,但AAssetDir_getNextFileName不會返回任何目錄名稱,所以基本上我無法深入到層次結構中,因爲我無法獲取子文件夾的名稱。有什麼辦法可以用AAssetManager來解決這個問題,還是我應該在Java中實現這個?使用Android本機AAssetManager的文件層次結構

資產看起來像

a/ 
    file1 
    file2 
b/ 
    file3 
    c/ 
    file4 

C++代碼

AAssetDir* assetDir = AAssetManager_openDir(env, ""); 
// filename is NULL since there is only folders at the root folder 
const char* filename = AAssetDir_getNextFileName(assetDir); 
AAssetDir_close(assetDir); 
AAssetDir* assetDir = AAssetManager_openDir(env, "a"); 
// filename is "file1" 
const char* filename = AAssetDir_getNextFileName(assetDir); 
// filename is "file2" 
filename = AAssetDir_getNextFileName(assetDir); 
AAssetDir_close(assetDir); 

編輯:

我發現AAssetDir_getNextFileName實現字面上從輸出過濾目錄。 Link to source code

+0

這不是重複的https://stackoverflow.com/questions/26101371/checking-if-directory-folder-exists-in-apk-via-native-code-only? –

+0

@AlexCohn編號與該問題的主要區別在於,我事先不知道文件夾名稱 - 我想在運行時發現它。 – vganin

回答

1

您可以通過三個步驟實現您的目標,每個步驟都需要一些編程。最重要的是,您的資產全部存在於APK文件中,您的應用可以找到並閱讀APK文件,其格式爲ZIP存檔。

  1. 找到你的APK文件的名稱。
  2. 打開此文件以作爲zip存檔文件閱讀。
  3. 遍歷assets/<whatever>的zip內容。

對於1),您可以use Java或者如果您必須留在C++中,請過濾/proc/<pid>/fd。你可能會發現一些系統APK文件(框架),但你的APK將是唯一不是系統的。

2),見use zlib to list directory structure of apk file in android。請注意,zlib是公共NDK庫的一部分。