2012-08-02 61 views
0

我從另一個文件導入這個項目,一切順利的話,除了這個奇怪的一塊代碼片段找不到MemoryFile類

  MemoryFile memoryFile = new MemoryFile(null, length); 
      memoryFile.writeBytes(buffer, 0, 0, length); 
      memoryFile.deactivate(); 
      return AssetFileDescriptor.fromMemoryFile(memoryFile); 

日食無效()函數抱怨說,關閉功能在MemoryFile類 以及不具有fromMemoryFile函數的AssetFileDescriptor中不存在。 這很奇怪,因爲根據以下鏈接,deactivatefromMemoryFile功能存在。 但SDK似乎無法找到它們,或者android.jar似乎沒有包含它們。

真正奇怪的是,「官方Android文檔」中的兩個函數「不存在」。

我將Properties-> Android中的「Project Build Target」從Android 2.1更改爲2.3,但問題仍然存在。我也在網上進行了廣泛的搜索,但奇怪的是,「沒有人」曾問過同樣的問題。

有什麼建議嗎? 謝謝。

回答

0

您可能正在複製某些內部類的代碼。 deactivate()fromMemoryFile()是隱藏的API(在源代碼中註釋爲@hide),不適用於應用程序開發人員使用。

+0

有什麼方法可以使用這些隱藏的API?這些是唯一的兩個錯誤,如果有某種方法可以從android.jar中公開那些隱藏的API,以便編譯器可以識別它們,那麼我認爲錯誤將消失... – Externalist 2012-08-02 06:57:51

+0

有幾種方法可以獲得那麼:1)如果所需的文件是獨立的實用程序類,則可以將它們複製到項目中並使用它們。2)如果您的系統上構建了aosp,則可以使用另一個未推薦的方法:使用'classes-debug-full。在'out/target/common/obj/JAVA_LIBRARIES'中將''from'framework_intermediates'中的jar包含在項目中作爲系統庫。這個罐子裏有所有的內部apis,因此這個項目將會建立。但是如果你試圖在其他任何版本上運行它,而不是從你拿過該jar的版本上運行它,這可能會中斷。 – 2012-08-02 07:04:05

+0

我關注了這個帖子(http://blog.naver.com/PostView.nhn?blogId=ncs10066&logNo=80156493486)並且修復了它! :)'隱藏的API'是解決問題的一個很棒的提示。萬分感謝! XDDD – Externalist 2012-08-02 07:46:26