範例:Android.mk編譯/執行Java程式(非APP)


1. Java程式碼

一個非常簡單的Java程式,放置在src/com/test/demo/HelloWorld.java

package com.test.demo;

public class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello World");
    }
}

2. 執行Java程式的sh檔

#!/system/bin/sh
base=/system
export CLASSPATH=$base/framework/JProg.jar
exec app_process $base/bin com.test.demo.HelloWorld "$@"

這個執行程式的sh檔案,其實是參照/system/bin/am所做的,依照你的需求可能會需要包含framework.jar
最後一行的com.test.demo.HelloWorld是隨著你的程式碼而改變的

3. 編譯用的Android.mk檔案


LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := JProg
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE)
include $(BUILD_JAVA_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := runJProg
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE)
LOCAL_SRC_FILES := runJProg
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)

會編譯出一個jar檔JProg.jar和runJProg

4. 在目標裝置中執行Java程式


編譯後會在out目錄下可以找到
system/framework/JProg.jar
system/bun/runJProg

Android 7.0之後版本可能還會輸出odex檔案
system/framework/oat/arm/JProg.odex 

只要將上述檔案都推入目標裝置對應位置,增加system/bun/runJProg的執行權限,就可以用runJProg跑Java程式啦!

留言