2014-04-01 10 views
2

在搜索網絡後發現問題後,我發現that答案。在Android中使用Runtime.getRuntime()創建新進程

簡而言之,我需要從Android應用程序產生一個新進程,並運行一個簡單的C程序。 我創建簡單的C程序,像下一個:

int main() 
{ 
printf("This is the message before sleep() function\n"); 
while(1){ 
    Sleep(1000); 
} 
printf("This is the message after 1 second"); 
return 0; 
} 

Iv'e遵循的C程序使用Cygwin與下一個命令(GCC myProgram.c -o myProgram)。

Iv'e將該文件放入assest文件夾,並在程序開始時將其複製到內部設備內存到文件夾"data/data/packageName/files/myProgram"

現在我想執行程序,並且當我檢查時,adb shell - > ps我想看到兩個具有相同名稱的進程,但找不到它。

我試圖像這樣運行程序:

調用Runtime.getRuntime()EXEC( 「搭配chmod 755 數據/數據/包/文件/ MyProgram」);

這不工作,我找不到兩個過程,我不知道這是否是正確的方法。

我在做什麼錯了?

謝謝。

+1

'chmod'將只需修改的權限指定的文件,而不是執行它。你還在使用哪種設備?你編譯好了嗎?例如,x86二進制不能在ARM設備上直接執行... – TheCodeArtist

回答

2

您需要將二進制文件部署到文件系統,以將其標記爲不可執行的位置(這就是爲什麼/sdcard/和其他常見位置不起作用的原因)。您需要選擇與平臺匹配的可執行文件版本(armeabi或x86或mips)。您應該確保您部署的文件具有可執行權限。

確保所有這一切的最簡單方法是將二進制文件的構建版本複製到${project_root}/libs/armeabi/lib_myProgram_.so,對於其他相關的ABI也是如此。現在APK構建器會打包二進制文件,安裝程序會將它們解壓縮到/data/data/your.package.name.with.dots/lib/lib_myProgram_.so

所有該做的,你只需從Java調用(以下行可以從活動或服務,即有機會獲得背景調用):

Runtime.getRuntime().exec(getContext().getApplicationInfo().nativeLibraryDir + "lib_myProgram_.so"); 
相關問題