Skip to content

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