2015-07-01 84 views
0

我正嘗試從版本4.0(API級別15)的Java Android應用程序中打包並執行本機ARM二進制文件。提升執行二進制文件的應用程序權限

包裝工作正常,將shell腳本和二進制文件添加到項目的資產文件夾中(使用Android Studio),它們將與APK一起部署。

然後我按照these solutions將資產複製到文件系統。這是第一個問題,我似乎只能寫入getFilesDir(),但不是例如。到/data/local/tmp/。非常好,所以我複製文件到應用程序數據目錄(解決類似於/data/data/com.myapp/files/。沿着這個過程,我也設置文件的模式是可執行的

然後我試着通過Runtime.getRuntime().exec()這似乎爲shellscripts工作,但不是二進制文件。我可以用這通過

貓/data/data/com.myapp/的二進制文件複製到我的首選目的地執行二進制files/binary>/data/local/tmp/binary

注意:cp wont工作,權限被拒絕。 Chmod 777再次運作。執行不起作用,權限被拒絕。我認爲它與如何安裝路徑有關。

整個過程在通過adb執行時起作用。我可以看到該應用程序與adb有不同的用戶標識,因此它可能與kernel limitations有關?我正在請求WRITE_EXTERNAL_STORAGE

閱讀this也意味着/data/local/tmp/應該是首選的目的地。

現在的問題是:(如何)我可以提升我的應用程序的權限,以執行與通過adb完成的操作相同的操作。

手機沒有固定。

回答

0

我通過執行shell腳本(通過資源捆綁並在onCreate()方法中寫入getFilesDir())解決了此問題。這使用臨時根環境來調用其他腳本,這些腳本在讀寫事物時沒有問題。

爲什麼它不會直接工作,沒有線索。

該腳本位於GitHub

相關問題