Android 通過zygote來運行java程序

在Android中大多數的程序都是通過java虛擬機運行,如果可以自己定製小程序,生成jar文件,然後通過app_process 來跑程序,實現自己需要的小功能也是不錯的,今天在此mark一個,此例子是在深入理解ANDROID卷3 中看到的,有感而作。先貼代碼

1.編寫功能代碼

代碼路徑: frameworks/base/cmds/samplewindow/其中samplewindow是新創建的,目的是爲了後面方便編譯生成.jar文件。

其目錄下的文件有:

SampleWindow.java

package com.android.test;                                                                                                        
public class SampleWindow{
    public static void main(String[] args){
        System.out.println("this is my window test");
    }   
}

Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := samplewindow 
include $(BUILD_JAVA_LIBRARY)

通過mm命令或者make命令編譯

mmm frameworks/base/cmds/samplewindow/

如果能在out目錄下下的 /system/framework/下找到samplewindow.jar說明編譯成功

2.編寫執行腳本sw.sh

base=/system                                                                                                                     
export CLASSPATH=$base/framework/samplewindow.jar

exec app_process $base/bin com.android.test.SampleWindow "$@"

其中samplewindow.jar爲第一步驟中成功生成的jar文件

com.android.test.SampleWindow 爲第一步驟中編寫的SampleWindow.java文件的完整包名

3.導入文件到手機

將前面的sw.sh文件和jar包push到手機中 路徑爲/system/framework

注意兩個文件的權限chmod 777 sw.sh ;chmod 777 samplewindow.jar

4.執行腳本看效果

adb 進入手機後./sw.sh 

看效果,本demo僅僅是打印一行輸出

this is my window test

此demo極其簡單,僅僅是告訴我們可以通過app_process 來運行java程序。其實通過這種機制,我們是可以創造出很多實用的小工具的。比如可以通過jar包讀取特定目錄的文件並執行之來達到我們需要完成的功能。但請注意一點,運行jar文件的程序其權限是什麼,有多大,當前我這邊還沒有驗證,這個是需要關注的。不過我猜測可能是系統權限。

最後給出下載地址:https://download.csdn.net/download/yong_xu/12542309

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章