diff --git a/test_apks/README.md b/test_apks/README.md new file mode 100644 index 0000000..a10e552 --- /dev/null +++ b/test_apks/README.md @@ -0,0 +1,12 @@ +# Test APKs + +## Requirements to build + +- Openjdk 17 at `/usr/lib/jvm/java-17-openjdk` +- Android SDK at `$(HOME)/Android/Sdk` with `build-tools;34.0.0` and `platform-tools` + +## Filtering logs: + +``` +adb logcat -s THESEUS +``` diff --git a/test_apks/dynloading/Makefile b/test_apks/dynloading/Makefile index bcaa9fe..b96b0e1 100644 --- a/test_apks/dynloading/Makefile +++ b/test_apks/dynloading/Makefile @@ -1,20 +1,26 @@ VERSION=34.0.0 -SDK_TOOLS=$(HOME)/Android/Sdk +VERSION_B=$(basename $(basename $(VERSION))) +ANDROID_HOME ?= $(HOME)/Android/Sdk +SDK_TOOLS=$(ANDROID_HOME) JAVA_PATH=/usr/lib/jvm/java-17-openjdk/bin -JAVAC=/usr/lib/jvm/java-17-openjdk/bin/javac -JAR=/usr/lib/jvm/java-17-openjdk/bin/jar -PYTHON=python3 -APP=test_dynloading +JAVAC=$(JAVA_PATH)/javac +JAR=$(JAVA_PATH)/jar +JARSIGNER=$(JAVA_PATH)/jarsigner +KEYTOOL=$(JAVA_PATH)/keytool +ADB=$(SDK_TOOLS)/platform-tools/adb +D8=$(SDK_TOOLS)/build-tools/$(VERSION)/d8 +AAPT=$(SDK_TOOLS)/build-tools/$(VERSION)/aapt +ZIPALIGN=$(SDK_TOOLS)/build-tools/$(VERSION)/zipalign +APKSIGNER=$(SDK_TOOLS)/build-tools/$(VERSION)/apksigner + +APP=test_dynloading PACKAGE=com.example.theseus.dynloading MAIN_ACTIVITY=MainActivity JAVAC_ARGS = D8_ARGS = - -VERSION_B=$(basename $(basename $(VERSION))) - pass=ahahah export PATH := $(JAVA_PATH):$(PATH) @@ -28,11 +34,11 @@ debug: D8_ARGS += --debug debug: all test: all - adb install build/$(APP).apk - adb shell am start -n $(PACKAGE)/.$(MAIN_ACTIVITY) + $(ADB) install build/$(APP).apk + $(ADB) shell am start -n $(PACKAGE)/.$(MAIN_ACTIVITY) build/%.v1signed.apk: ./build/%.unsigned.apk ./ToyKey.keystore - jarsigner -verbose -keystore ./ToyKey.keystore -storepass $(pass) -keypass $(pass) -signedjar $@ $< SignKey + $(JARSIGNER) -verbose -keystore ./ToyKey.keystore -storepass $(pass) -keypass $(pass) -signedjar $@ $< SignKey build/%.v1.apk: ./build/%.v1signed.apk $(SDK_TOOLS)/build-tools/$(VERSION)/zipalign -v -f 4 $< $@ @@ -44,22 +50,22 @@ build/%/classes: $(shell find java/ -type f -regex ".*\.java" ) build/%/classes.dex: build/%/classes mkdir -p ./build/$* - $(SDK_TOOLS)/build-tools/$(VERSION)/d8 $(D8_ARGS) --classpath $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar $(shell find build/$*/classes -type f -regex ".*\.class" -printf "'%p'\n") --output ./build/$*/ + $(D8) $(D8_ARGS) --classpath $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar $(shell find build/$*/classes -type f -regex ".*\.class" -printf "'%p'\n") --output ./build/$*/ build/%.unsigned.apk: build/classes/classes.dex build/a/classes.dex mkdir -p ./build/$*_files ./build/$*_files/assets mv ./build/classes/classes.dex ./build/$*_files/classes.dex mv build/a/classes.dex ./build/$*_files/assets/a.dex - $(SDK_TOOLS)/build-tools/$(VERSION)/aapt package -v -f -M ./AndroidManifest.xml -I $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar -F $@ ./build/$*_files + $(AAPT) package -v -f -M ./AndroidManifest.xml -I $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar -F $@ ./build/$*_files build/%.v2aligned.apk: ./build/%.unsigned.apk ./ToyKey.keystore - $(SDK_TOOLS)/build-tools/$(VERSION)/zipalign -v -f 4 $< $@ + $(ZIPALIGN) -v -f 4 $< $@ build/%.apk: ./build/%.v2aligned.apk - $(SDK_TOOLS)/build-tools/$(VERSION)/apksigner sign -ks ./ToyKey.keystore --v2-signing-enabled true --in $< --out $@ --ks-pass pass:$(pass) + $(APKSIGNER) sign -ks ./ToyKey.keystore --v2-signing-enabled true --in $< --out $@ --ks-pass pass:$(pass) ToyKey.keystore : - keytool -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore $@ -storepass $(pass) -keypass $(pass) -alias SignKey -keyalg RSA -v + $(KEYTOOL) -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore $@ -storepass $(pass) -keypass $(pass) -alias SignKey -keyalg RSA -v clean: $(RM) -r build/* diff --git a/test_apks/dynloading/java/classes/com/example/theseus/Utils.java b/test_apks/dynloading/java/classes/com/example/theseus/Utils.java index 1d02590..09006b6 100644 --- a/test_apks/dynloading/java/classes/com/example/theseus/Utils.java +++ b/test_apks/dynloading/java/classes/com/example/theseus/Utils.java @@ -2,6 +2,7 @@ package com.example.theseus; import android.app.Activity; import android.app.AlertDialog; +import android.util.Log; import java.io.InputStream; import java.io.OutputStream; @@ -16,6 +17,7 @@ public class Utils { } public static void popup(Activity ac, String title, String msg) { + Log.e("THESEUS", "POPUP, title: " + title + ", msg: " + msg); (new AlertDialog.Builder(ac)) .setMessage(msg) .setTitle(title) diff --git a/test_apks/reflection/Makefile b/test_apks/reflection/Makefile index 7378212..918c5da 100644 --- a/test_apks/reflection/Makefile +++ b/test_apks/reflection/Makefile @@ -1,20 +1,26 @@ VERSION=34.0.0 -SDK_TOOLS=$(HOME)/Android/Sdk +VERSION_B=$(basename $(basename $(VERSION))) +ANDROID_HOME ?= $(HOME)/Android/Sdk +SDK_TOOLS=$(ANDROID_HOME) JAVA_PATH=/usr/lib/jvm/java-17-openjdk/bin -JAVAC=/usr/lib/jvm/java-17-openjdk/bin/javac -JAR=/usr/lib/jvm/java-17-openjdk/bin/jar -PYTHON=python3 -APP=test_reflection +JAVAC=$(JAVA_PATH)/javac +JAR=$(JAVA_PATH)/jar +JARSIGNER=$(JAVA_PATH)/jarsigner +KEYTOOL=$(JAVA_PATH)/keytool +ADB=$(SDK_TOOLS)/platform-tools/adb +D8=$(SDK_TOOLS)/build-tools/$(VERSION)/d8 +AAPT=$(SDK_TOOLS)/build-tools/$(VERSION)/aapt +ZIPALIGN=$(SDK_TOOLS)/build-tools/$(VERSION)/zipalign +APKSIGNER=$(SDK_TOOLS)/build-tools/$(VERSION)/apksigner + +APP=test_reflection PACKAGE=com.example.theseus.reflection MAIN_ACTIVITY=MainActivity JAVAC_ARGS = D8_ARGS = - -VERSION_B=$(basename $(basename $(VERSION))) - pass=ahahah export PATH := $(JAVA_PATH):$(PATH) @@ -28,14 +34,14 @@ debug: D8_ARGS += --debug debug: all test: all - adb install build/$(APP).apk - adb shell am start -n $(PACKAGE)/.$(MAIN_ACTIVITY) + $(ADB) install build/$(APP).apk + $(ADB) shell am start -n $(PACKAGE)/.$(MAIN_ACTIVITY) build/%.v1signed.apk: ./build/%.unsigned.apk ./ToyKey.keystore - jarsigner -verbose -keystore ./ToyKey.keystore -storepass $(pass) -keypass $(pass) -signedjar $@ $< SignKey + $(JARSIGNER) -verbose -keystore ./ToyKey.keystore -storepass $(pass) -keypass $(pass) -signedjar $@ $< SignKey build/%.v1.apk: ./build/%.v1signed.apk - $(SDK_TOOLS)/build-tools/$(VERSION)/zipalign -v -f 4 $< $@ + $(ZIPALIGN) -v -f 4 $< $@ # TODO: fix dep somehow? cannot find a way to use % or $* in (shell ..) build/%/classes: $(shell find java/ -type f -regex ".*\.java" ) @@ -44,21 +50,21 @@ build/%/classes: $(shell find java/ -type f -regex ".*\.java" ) build/%/classes.dex: build/%/classes mkdir -p ./build/$* - $(SDK_TOOLS)/build-tools/$(VERSION)/d8 $(D8_ARGS) --classpath $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar $(shell find build/$*/classes -type f -regex ".*\.class" -printf "'%p'\n") --output ./build/$*/ + $(D8) $(D8_ARGS) --classpath $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar $(shell find build/$*/classes -type f -regex ".*\.class" -printf "'%p'\n") --output ./build/$*/ build/%.unsigned.apk: build/classes/classes.dex mkdir -p ./build/$*_files mv ./build/classes/classes.dex ./build/$*_files/classes.dex - $(SDK_TOOLS)/build-tools/$(VERSION)/aapt package -v -f -M ./AndroidManifest.xml -I $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar -F $@ ./build/$*_files + $(AAPT) package -v -f -M ./AndroidManifest.xml -I $(SDK_TOOLS)/platforms/android-$(VERSION_B)/android.jar -F $@ ./build/$*_files build/%.v2aligned.apk: ./build/%.unsigned.apk ./ToyKey.keystore - $(SDK_TOOLS)/build-tools/$(VERSION)/zipalign -v -f 4 $< $@ + $(ZIPALIGN) -v -f 4 $< $@ build/%.apk: ./build/%.v2aligned.apk - $(SDK_TOOLS)/build-tools/$(VERSION)/apksigner sign -ks ./ToyKey.keystore --v2-signing-enabled true --in $< --out $@ --ks-pass pass:$(pass) + $(APKSIGNER) sign -ks ./ToyKey.keystore --v2-signing-enabled true --in $< --out $@ --ks-pass pass:$(pass) ToyKey.keystore : - keytool -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore $@ -storepass $(pass) -keypass $(pass) -alias SignKey -keyalg RSA -v + $(KEYTOOL) -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore $@ -storepass $(pass) -keypass $(pass) -alias SignKey -keyalg RSA -v clean: $(RM) -r build/* diff --git a/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java b/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java index 2d4aa7a..453c800 100644 --- a/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java +++ b/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java @@ -2,8 +2,10 @@ package com.example.theseus; import android.app.Activity; import android.app.AlertDialog; +import android.util.Log; import com.example.theseus.reflection.Reflectee; import com.example.theseus.reflection.ChildReflectee; +import android.util.Log; public class Utils { @@ -15,6 +17,7 @@ public class Utils { } public static void popup(Activity ac, String title, String msg) { + Log.e("THESEUS", "POPUP, title: " + title + ", msg: " + msg); (new AlertDialog.Builder(ac)) .setMessage(msg) .setTitle(title)