一, java动态库程序代码
在Anroid层根目录新建study/java_lib/lib目录, 并创建文件名:
com/wq/mytestjar/Test.java
package com.wq.mytestjar;
public class Test
{
private int a;
private int b;
private int c;
public Test(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public Test()
{
this(9, 12, 15);
}
public int sum()
{
return (a+b+c);
}
}
二, java动态库Android.mk编写
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_DEX_PREOPT = false
LOCAL_MODULE := libmytest
include $(BUILD_JAVA_LIBRARY)
三, 编译java动态库-jar
进入到该目录:study/java_lib/lib
然后执行mm命令编译
生成的目标文件有如下:
中间文件:out\target\product\sl8541e_cus_go\obj\JAVA_LIBRARIES\libmytest_intermediates\javalib.jar
目标文件:out\target\product\sl8541e_cus_go\system\framework\libmytest.jar
四,主程序使用链接库代码
新建文件study/java_lib/main/TestDemo.java
package com.wq.main;
import com.wq.mytestjar.Test;
public class TestDemo
{
public static void main(String[] args)
{
Test test;
test = new Test(3, 4, 5);
System.out.println("test sum : "+test.sum());
}
}
study/java_lib/main/Android.mk编写如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_JAVA_LIBRARIES := libmytest
LOCAL_DEX_PREOPT = false
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := TestDemo
include $(BUILD_JAVA_LIBRARY)
生成的目标文件有如下:
中间文件:out\target\product\sl8541e_cus_go\obj\JAVA_LIBRARIES\TestDemo_intermediates\javalib.jar
目标文件:out\target\product\sl8541e_cus_go\system\framework\TestDemo.jar
五、在java_lib目录下面添加Android.mk文件
include $(call all-subdir-makefiles)
备注:该行脚本作用就是把把主程序main和库文件一起编译
编译出来的文件
六,运行
1、将编译好的jar动态库推进到设备/data/local/tmp目录下面去
adb root
adb remount
adb push libmytest.jar /data/local/tmp
adb push TestDemo.jar /data/local/tmp
2、进入/data/local/tmp目录
adb shell
cd /data/local/tmp
3、进入到设备中,设置将要执行的jar包的classpass,不设置将无法执行:
export CLASSPATH=/data/local/tmp/TestDemo.jar:/data/local/tmp/libmytest.jar
4、运行该jar包
app_process /data/local/tmp com.wq.main.TestDemo
运行日志如下
sl8541e_cus_go:/data/local/tmp # ls
TestDemo.jar device-explorer libmytest.jar
sl8541e_cus_go:/data/local/tmp # app_process /data/local/tmp com.wq.main.TestDemo
test sum : 12
sl8541e_cus_go:/data/local/tmp # ls -al
总结:从日志中可以分析看出使用app_process 来运行TestDemo程序,然后会把该程序生成odex和vdex文件