diff --git a/Dockerfile b/Dockerfile index 907b5e1..3e5de88 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,5 +19,9 @@ ENV PATH="$PATH:$BUILD_TOOLS_LATEST/bin" ENV LIBRARY_PATH="$LIBRARY_PATH:$BUILD_TOOLS_LATEST/lib" RUN yes | sdkmanager --install "build-tools;33.0.2" -RUN yes | sdkmanager --install "plattforms:33" -RUN useradd -m -s /bin/bash app +RUN yes | sdkmanager --install "platforms;android-33" +RUN apk add setpriv +COPY entrypoint.sh /entrypoint.sh +RUN chown 0:0 /entrypoint.sh +RUN chmod 0700 /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/apk/Makefile b/apk/Makefile new file mode 100644 index 0000000..4aecfa5 --- /dev/null +++ b/apk/Makefile @@ -0,0 +1,54 @@ +JAVA_HONE = /usr/lib/jvm/java-8-openjdk +ANDROID_HOME = /root/sdk +TOOLCHAIN = /Users/amon/grive/development/Android/NativeToolchain +GCC = $(TOOLCHAIN)/bin/aarch64-linux-android-gcc +CXX_FLAGS = -march=armv8-a --sysroot=$(TOOLCHAIN)/sysroot + + +say_hello: + echo "this was a test" + +all: build deploy + +.PHONY : build +.PHONY : deploy +.PHONY : clean + +deploy : + adb install -r ./bin/hellojni.apk + +build : ./bin/hellojni.apk + +./bin/hellojni.apk : ./bin/signed.apk + $(ANDROID_HOME)/build-tools/23.0.3/zipalign -v -f 4 $< $@ + +./bin/signed.apk : ./bin/unsigned.apk ./ToyKey.keystore + $(JAVA_HOME)/bin/jarsigner -verbose -keystore ./ToyKey.keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey + +./bin/unsigned.apk : ./bin/classes.dex + $(ANDROID_HOME)/build-tools/23.0.3/aapt package -v -f -M ./AndroidManifest.xml -S ./res \ + -I $(ANDROID_HOME)/platforms/android-23/android.jar -F $@ ./bin +# $(ANDROID_HOME)/build-tools/23.0.3/aapt add $@ lib/arm64-v8a/libhello.so + +./bin/classes.dex : ./obj/com/example/hellojni/HelloJni.class + $(ANDROID_HOME)/build-tools/23.0.3/dx --dex --verbose --output=$@ ./obj + +#./lib/arm64-v8a/libhello.so : ./jni/hello.o +# $(GCC) -shared $< -o $@ + +#./jni/%.o : ./jni/%.c +# $(GCC) $(CXX_FLAGS) -fPIC -c $< -o $@ + +./src/com/example/hellojni/R.java : $(shell find ./res -type f) + $(ANDROID_HOME)/build-tools/23.0.3/aapt package -v -f -m -S ./res -J ./src -M ./AndroidManifest.xml \ + -I $(ANDROID_HOME)/platforms/android-23/android.jar + +./obj/com/example/hellojni/HelloJni.class : ./src/com/example/hellojni/HelloJNI.java ./src/com/example/hellojni/R.java + $(JAVA_HOME)/bin/javac -source 7 -target 7 -d ./obj -classpath $(ANDROID_HOME)/platforms/android-23/android.jar -sourcepath ./src $< + +./ToyKey.keystore : + $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=some company,O=Android,C=JPN" -keystore $@ \ + -storepass armena -keypass armena -alias helljniKey -keyalg RSA -v + +clean: + rm -f ./bin/* ./lib/arm64-v8a/* diff --git a/docker-compose.yml b/docker-compose.yml index 8702390..f7c456c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,9 @@ version: "3.9" services: - app-compiler: + compile: build: context: . stop_grace_period: 1s - entrypoint: sh -c 'sleep infinity' + #command: ["id; sleep infinity"] + volumes: + - ./apk:/apk diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..6eeafba --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +cd /apk; +VOLUID="$(stat -c "%u" /apk)"; +VOLGID="$(stat -c "%g" /apk)"; +CMD="${*:-"make"}" +setpriv --reuid $VOLUID --regid $VOLGID --clear-groups sh -c "$CMD" +