728x90
디바이스 스크린을 캡쳐 하는 것은 어떤 권한(privilege)이 요구 되는 데, shell에 권하는 주는 것입니다.
안드로이드 shell로 adb shell에서 app_process 호출을 통해 자바코드의 실행이 가능합니다.
Hello, world!
다음 간단한 자바 애플리케이션입니다.
public class HelloWorld {
public static void main(String... args) {
System.out.println("Hello, world!");
}
}
컴파일하고 dex 파일을 만듭니다:
javac -source 1.7 -target 1.7 HelloWorld.java
"$ANDROID_HOME"/build-tools/27.0.2/dx \
--dex --output classes.dex HelloWorld.class
그런다음, 우리는 안드로이드 장비에 classes.dex 파일을 푸쉬합니다.
adb push classes.dex /data/local/tmp/
그리고 실행해 봅시다:
$ adb shell CLASSPATH=/data/local/tmp/classes.dex app_process / HelloWorld
$ Hello, world!
안드로이드 프레임워크 접근하기
애플리케이션이 런타임상에서 안드로이드 프레임워크를 접근 할 수 있습니다.
예를 들어, android.os.SystemClock을 사용해 봅시다:
import android.os.SystemClock;
public class HelloWorld {
public static void main(String... args) {
Systehttp://m.out.print("Hello,");
SystemClock.sleep(1000);
System.out.println(" world!");
}
}
android.jar로 우리의 클래스를 링크합니다:
javac -source 1.7 -target 1.7 -cp "$ANDROID_HOME"/platforms/android-27/android.jar
HelloWorld.java
앞선 예제처럼 프로그램을 실행합니다.
또 scrcpy가 프레임워크에 숨겨진 메서드들(hidden methods)에 대한 접근이 필요합니다.
이런 경우에는 android.jar에 대한 링킹만으로 불충분하므로, 리플렉션을 사용합니다.
APK와 함께
실행은 classes.dex가 zip/jar 내에 포함되어 있어도 동작 할 수 있습니다:
jar cvf hello.jar classes.dex
adb push hello.jar /data/local/tmp/
adb shell CLASSPATH=/data/local/tmp/hello.jar app_process / HelloWorld
classes.dex 파일을 포함하는 zip 예제를 뭐라고 하는지 아시나요? APK 라고 하죠~!
그러므로, 메인 메서드가 있는 클래스를 포함하는 어떤 종류의 설치 APK도 가능합니다:
$ adb install myapp.apk
…
$ adb shell pm path my.app.package
package:/data/app/my.app.package-1/base.apk
$ adb shell CLASSPATH=/data/app/my.app.package-1/base.apk \
app_process / HelloWorld
728x90
'모바일프로그래밍' 카테고리의 다른 글
안드로이드 애플리케이션(성능 등등) 분석 툴 (0) | 2022.07.01 |
---|---|
프로그래밍으로 APK 서명하기 (0) | 2022.04.26 |
[안드로이드] gradle 오프라인 빌드 환경 구축 (0) | 2022.04.25 |
[안드로이드] OpenCV와 Android Studio (0) | 2022.03.17 |