2011-12-29 46 views
3

Android操作系統如何使用在NDK編譯的.apk中運行的本機代碼處理權限?在我看來,因爲JNI只是調用本地函數,所以代碼的實際NATIVE部分不應受Android權限的影響。例如,我期望開發一個在數據/系統下寫入文件的Android應用程序(.apk)。 AOS已經將數據/系統安裝爲RW,所以我已經能夠開發一個可以輕鬆執行寫入的本地程序。我的想法是,當我使用NDK實現這個功能時,由於本地實現,我不必設置寫入目錄的權限。這個假設是否正確?Android NDK Native權限

謝謝, 大衛

+0

幸運有沒有這樣的與用戶授予的權限讓周圍的簡便方法。你的假設可能適用於其中的一些,但不是全部。 – harism 2011-12-29 22:17:14

回答

1

我的想法是,當我實現這個使用NDK,我就不必設置權限寫入到該目錄,因爲本地的實行。這個假設是否正確?

絕對不是。權限影響一切的過程中,無論選擇何種編程語言編寫。

+0

你能詳細說一下嗎?這就是我所知道的,活動管理器服務在應用程序爲特定活動制定意圖時強制執行所有Android權限。如果您通過應用運行本機代碼,它如何實施這些權限?在我看來,因爲意圖對象只存在於Java級別實現上,所以本機代碼將繞過整個過程。 我還認爲,在母語水平的唯一強制執行的權限是由內核,防止某些UID和GID進行的訪問某些硬件... – David 2011-12-30 14:38:33

+0

@大衛:「活動管理服務強制所有的Android權限時的應用程序,使得一個給定活動的意圖「 - 不。權限與'intents'無關。 「它如何執行這些權限?」 - 因爲權限在需要的地方被強制執行。 「我也認爲,在本地級別,唯一的強制執行權限是由內核完成的,這會阻止某些UID和GID訪問某些硬件」 - 雖然可以做到這一點,但有很多內核級權限檢查(例如, 'INTERNET')。 – CommonsWare 2011-12-30 14:44:19

+0

從developer.android.com上的進一步閱讀,它聲明「一個Intent對象被傳遞給Context.startActivity()或Activity.startActivityForResult()來啓動一個活動或獲得一個現有的活動來做一些新的事情」。在檢查ActivityManagerService.java之後,AMS收到啓動活動的意圖後,會調用PackageManageService來檢查關聯的intent權限是否位於packages.xml中。我們發現當應用程序調用此本機代碼時沒有任何活動正在啓動,那麼您能否詳細說明這些權限是如何實施的? – David 2011-12-30 15:05:43