android手机通过命令行方式启动自己的程序
1.从dex中启动
sh
#编译成class文件
javac com/kpa/demo/Hello.java
#把服务打包成jar
jar -cvf SayHello.jar com/kpa/services/SayHello.class
#查看jar包内容 检查是否正常
jar -tf SayHello.jar
#把class编译成dex
set PATH=D:\ProgramData\AndroidSDK\build-tools\34.0.0;%PATH%
d8.bat --output=. com\kpa\demo\*.class
#复制到手机中
adb push classes.dex /sdcard/work/classes.dex
#执行
adb shell
cd /sdcard/work
exec app_process -Djava.class.path=/sdcard/work/classes.dex /sdcard/work com.kpa.demo.Hello
2.从APK中启动
apk里写个main方法 安装到手机
sh
adb shell CLASSPATH=/data/app/com.example.helloworld-2.apk exec app_process /system/bin com.example.helloworld
3.指定so
java
package com.jnitest.app;
public class JNITest {
public static void main(String[] args) {
System.out.println("Hello from JNITest");
System.out.println("String from JNI: " + JNIInterface.getString());
}
static {
String libPath = System.getenv("CLASSPATH") +
"!/lib/" + Build.SUPPORTED_ABIS[0] +
"/libapp.so";
System.err.println("Loading shared library: " + libPath);
System.load(libPath);
}
}
sh
//需要不压缩apk
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging false
}
}
...
}
LD_LIBRARY_PATH=/path/to/apk/temp.apk!/lib/abi
CLASSPATH=/path/to/apk/temp.apk
app_process /system/bin com.package.name.Main