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

 

你可能感兴趣的:(android,app_process)