假設我有一個名爲A的應用程序,該數據目錄爲:com.example.test 現在我想讓另一個名爲B的應用程序修改com.example.test中的某些內容。如何讓另一個應用程序訪問我的應用程序的數據目錄?
當然我知道兩者必須共享相同的簽名。但我還有什麼?
基本上我試圖設計一個應用程序,用戶可以插入新的組件。任何想法?
假設我有一個名爲A的應用程序,該數據目錄爲:com.example.test 現在我想讓另一個名爲B的應用程序修改com.example.test中的某些內容。如何讓另一個應用程序訪問我的應用程序的數據目錄?
當然我知道兩者必須共享相同的簽名。但我還有什麼?
基本上我試圖設計一個應用程序,用戶可以插入新的組件。任何想法?
我相信最安全的方法是使用Content Provider。然後,要從應用程序B訪問應用程序A中的文件,可以在應用程序A中聲明ContentProvider
,並覆蓋public ParcelFileDescriptor openFile(Uri uri, String mode)
方法。然後,應用程序B可以使用getContentResolver().openInputStream(...)
方法通過相應的URI訪問位於應用程序A的數據目錄中的文件。欲瞭解更多信息,請參閱:
http://www.grokkingandroid.com/handling-binary-data-with-contentproviders/
這兩個應用程序具有在清單中指定相同的用戶ID:
機器人:sharedUserId
將與其它應用程序共享一個Linux用戶ID的名稱。默認情況下,Android爲每個應用程序分配自己唯一的用戶ID。但是,如果此屬性設置爲兩個或更多應用程序的相同值,則它們將共享相同的ID - 前提是它們也由相同的證書籤名。具有相同用戶標識的應用程序可以訪問彼此的數據,並且如果需要,可以在相同的過程中運行。
聲明:我從來沒有這樣做過,但根據documentation它應該工作。
您可以通過使用Context.createPackageContent()獲取其他應用程序的上下文,並使用CONTEXT_RESTRICTED,然後您可以只使用文件名使用openFileOutput。 在AndroidManifest.xml中添加此項: - 通過使用protectionLevel =「簽名」,只有您簽名的應用才能訪問您的內容提供商,從而訪問您的文件。 並在這兩個應用程序的AndroidManifest.xml中,寫下:
我用了sharedUserId一個應用程序,我正在同。當我使用相同的Android項目庫在每個應用程序中引用時,我得到了一些無效的ClassCastExceptions。我已發佈[一個問題](http://stackoverflow.com/questions/11224064/running-multiple-applications-on-a-shared-process-with-a-shared-project-library)的解決方法。直到現在我還沒有找到任何解決方法,而不是避免使用相同的用戶ID。 – Angelo