2013-11-25 68 views
2

我:Android原生應用程序的命令行參數

void android_main(struct android_app* state) 

是否有可能獲得用於從android_app結構啓動應用程序的命令行參數?如果沒有,有沒有其他的意思讓他們使用C++調用(我不能使用Java代碼)?

+1

爲什麼downvote?在每個平臺上,main函數在其簽名中都有argv/argc。當應用程序啓動時,可以從IDE或其他工具傳遞參數。 Android是linux,它應該支持類似的功能。 – Felics

+0

Android應用程序沒有命令行參數。最接近命令行參數的是用於啓動應用程序的活動或服務的「Intent」對象。 – tiguchi

+0

@NobuGames爲什麼VisualGDB有選項將附加參數傳遞給「am start」呢?爲什麼downvote而不是僅僅回答Android應用程序沒有命令行參數? – Felics

回答

6

Android應用程序進程沒有應用程序唯一的命令行參數,因爲沒有執行exec()調用來啓動它們。

通常情況下,當一個shell啓動一個程序時,它會自動創建一個新進程,然後在該進程中立即調用exec()來替換正在執行的shell程序映像。 argc & argv變量是從傳遞給exec()的參數派生的。

但是在Android上,由於各種原因,包括系統共享代碼頁,所有正常的應用程序進程都是稱爲zygote的進程的特殊子進程。沒有執行exec()調用,而是在fork之後實現應用程序的代碼被簡單地加載到進程中,並且它被降級爲應用程序的用戶名。因爲沒有exec()調用來建立新的命令行參數,所以進程可用的唯一的那些是用於在啓動Android運行時期間啓動原始zygote進程的那些參數。這些可能包括虛擬機運行模式選項,但沒有關於特定的應用程序。

應用程序進程以及其中的活動或服務對象啓動以響應意圖。正如已經在評論中指出的那樣,Intent對象具有許多對接收器可見的參數,其中一些參數的作用非常類似於傳統系統中的命令行參數。從功能上來說,它是Intent對象的那些字段,它可以用來查找。

而且Nobu Games在評論中指出,「本地活動」在功能上並非完全不同 - 它仍然是一個常規的基於VM的應用程序,其中包含許多關鍵的Java代碼,只是第三方開發人員只寫jni庫,必要的java代碼已經與系統打包在一起。

相關問題