diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba215ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +apk/ToyKey.keystore +apk/obj +apk/obj/* +apk/bin/!.gikeep diff --git a/Dockerfile b/Dockerfile index 3e5de88..235545d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,7 @@ -FROM alpine:latest +FROM archlinux:latest -RUN apk update -RUN apk add coreutils bash shadow make zip -RUN apk add openjdk11-jdk +RUN pacman -Syu --noconfirm +RUN pacman -S --noconfirm coreutils bash shadow make unzip jdk11-openjdk wget ENV ANDROID_SDK_ROOT="/opt/android" ENV BUILD_TOOLS_LATEST="$ANDROID_SDK_ROOT/cmdline-tools/latest" RUN BUILD_TOOLS="$(realpath -m "$BUILD_TOOLS_LATEST/..")";\ @@ -16,12 +15,15 @@ RUN BUILD_TOOLS="$(realpath -m "$BUILD_TOOLS_LATEST/..")";\ rm cmdline-tools.zip;\ mv -v cmdline-tools "$BUILD_TOOLS_LATEST" || true ENV PATH="$PATH:$BUILD_TOOLS_LATEST/bin" +ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk/" +#ENTRYPOINT bash -c 'sleep 10000' ENV LIBRARY_PATH="$LIBRARY_PATH:$BUILD_TOOLS_LATEST/lib" - +RUN touch /file RUN yes | sdkmanager --install "build-tools;33.0.2" RUN yes | sdkmanager --install "platforms;android-33" -RUN apk add setpriv +#RUN apk add setpriv COPY entrypoint.sh /entrypoint.sh RUN chown 0:0 /entrypoint.sh RUN chmod 0700 /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] +RUN touch /file2 +# diff --git a/Dockerfile.alpine b/Dockerfile.alpine new file mode 100644 index 0000000..281166c --- /dev/null +++ b/Dockerfile.alpine @@ -0,0 +1,27 @@ +FROM alpine:latest + +RUN apk update +RUN apk add coreutils bash shadow make zipi gcompat libgcc libc++ +RUN apk add openjdk11-jdk +ENV ANDROID_SDK_ROOT="/opt/android" +ENV BUILD_TOOLS_LATEST="$ANDROID_SDK_ROOT/cmdline-tools/latest" +RUN BUILD_TOOLS="$(realpath -m "$BUILD_TOOLS_LATEST/..")";\ + mkdir -p "$BUILD_TOOLS";\ + cd "$BUILD_TOOLS";\ + pwd;\ + wget -O cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip;\ + unzip cmdline-tools.zip;\ + ls ;\ + ls cmdline-tools;\ + rm cmdline-tools.zip;\ + mv -v cmdline-tools "$BUILD_TOOLS_LATEST" || true +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 "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/AndroidManifest.xml b/apk/AndroidManifest.xml new file mode 100644 index 0000000..bdfa76e --- /dev/null +++ b/apk/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/apk/Makefile b/apk/Makefile index 4aecfa5..eb5ee31 100644 --- a/apk/Makefile +++ b/apk/Makefile @@ -1,12 +1,14 @@ -JAVA_HONE = /usr/lib/jvm/java-8-openjdk -ANDROID_HOME = /root/sdk +#JAVA_HONE = /usr/lib/jvm/java-8-openjdk +ANDROID_HOME = /opt/android +ANDROID_VERSION = 33.0.2 +PLATFORM = android-$(shell echo $(ANDROID_VERSION) | sed 's/\..*//') 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" + echo "this was a test $(PLATFORM)" all: build deploy @@ -19,19 +21,26 @@ deploy : build : ./bin/hellojni.apk -./bin/hellojni.apk : ./bin/signed.apk - $(ANDROID_HOME)/build-tools/23.0.3/zipalign -v -f 4 $< $@ +#./bin/hellojni.apk : ./bin/aligned.apk +# j +# cp $< $@ + +./bin/hellojni.apk : ./bin/signed.apk + $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/zipalign -v -f 4 $< $@ + $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/apksigner sign --ks ToyKey.keystore $@ -./bin/signed.apk : ./bin/unsigned.apk ./ToyKey.keystore - $(JAVA_HOME)/bin/jarsigner -verbose -keystore ./ToyKey.keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey +./bin/signed.apk : ./bin/unsigned.apk ./ToyKey.keystore + #$(JAVA_HOME)/bin/jarsigner -verbose -keystore ./ToyKey.keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey + 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/$(ANDROID_VERSION)/aapt package -v -f -M ./AndroidManifest.xml -S ./res \ + -I $(ANDROID_HOME)/platforms/$(PLATFORM)/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 + #$(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/d8 --dex --verbose --output=$@ ./obj + $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/d8 $(shell find obj -name '*.class') --lib $(ANDROID_HOME)/platforms/$(PLATFORM)/android.jar --output bin #./lib/arm64-v8a/libhello.so : ./jni/hello.o # $(GCC) -shared $< -o $@ @@ -40,14 +49,17 @@ build : ./bin/hellojni.apk # $(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 + $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/aapt package -v -f -m -S ./res -J ./src -M ./AndroidManifest.xml \ + -I $(ANDROID_HOME)/platforms/$(PLATFORM)/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 $< + #$(JAVA_HOME)/bin/javac -source 7 -target 7 -d ./obj -classpath $(ANDROID_HOME)/platforms/$(PLATFORMgg)/android.jar -sourcepath ./src $< + #javac -source 7 -target 7 -d ./obj -classpath $(ANDROID_HOME)/platforms/$(PLATFORM)/android.jar -sourcepath ./src $< + javac -d ./obj -classpath $(ANDROID_HOME)/platforms/$(PLATFORM)/android.jar -sourcepath ./src $< ./ToyKey.keystore : - $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=some company,O=Android,C=JPN" -keystore $@ \ + #$(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=some company,O=Android,C=JPN" -keystore $@ + keytool -genkeypair -validity 1000 -dname "CN=some company,O=Android,C=JPN" -keystore $@ \ -storepass armena -keypass armena -alias helljniKey -keyalg RSA -v clean: diff --git a/apk/bin/.gitkeep b/apk/bin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/apk/res/drawable-hdpi/ic_launcher.png b/apk/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000..96a442e Binary files /dev/null and b/apk/res/drawable-hdpi/ic_launcher.png differ diff --git a/apk/res/drawable-ldpi/ic_launcher.png b/apk/res/drawable-ldpi/ic_launcher.png new file mode 100644 index 0000000..9923872 Binary files /dev/null and b/apk/res/drawable-ldpi/ic_launcher.png differ diff --git a/apk/res/drawable-mdpi/ic_launcher.png b/apk/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000..359047d Binary files /dev/null and b/apk/res/drawable-mdpi/ic_launcher.png differ diff --git a/apk/res/drawable-xhdpi/ic_launcher.png b/apk/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000..71c6d76 Binary files /dev/null and b/apk/res/drawable-xhdpi/ic_launcher.png differ diff --git a/apk/res/layout/main.xml b/apk/res/layout/main.xml new file mode 100644 index 0000000..611c794 --- /dev/null +++ b/apk/res/layout/main.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/apk/res/values/strings.xml b/apk/res/values/strings.xml new file mode 100644 index 0000000..c526073 --- /dev/null +++ b/apk/res/values/strings.xml @@ -0,0 +1,4 @@ + + + HelloJni + diff --git a/apk/src/com/example/hellojni/HelloJNI.java b/apk/src/com/example/hellojni/HelloJNI.java new file mode 100644 index 0000000..215ad5d --- /dev/null +++ b/apk/src/com/example/hellojni/HelloJNI.java @@ -0,0 +1,29 @@ +package com.example.hellojni; + +import android.util.Log; +import android.widget.TextView; +import android.app.Activity; +import android.os.Bundle; + +public class HelloJNI extends Activity +{ + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + TextView tv = new TextView(this); + tv.setText( "hallo " ); + //stringFromJNI() ); + // tv.setText("sup"); + setContentView(tv); + } + + public native String stringFromJNI(); + +/* static { + Log.i("amo", "Trying to load shared library!"); + System.loadLibrary("hellojni"); + } + */ +} diff --git a/apk/src/com/example/hellojni/R.java b/apk/src/com/example/hellojni/R.java new file mode 100644 index 0000000..1087387 --- /dev/null +++ b/apk/src/com/example/hellojni/R.java @@ -0,0 +1,22 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package com.example.hellojni; + +public final class R { + public static final class attr { + } + public static final class drawable { + public static final int ic_launcher=0x7f020000; + } + public static final class layout { + public static final int main=0x7f030000; + } + public static final class string { + public static final int app_name=0x7f040000; + } +} diff --git a/docker-compose.yml b/docker-compose.yml index f7c456c..baa0537 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,6 @@ services: build: context: . stop_grace_period: 1s - #command: ["id; sleep infinity"] + command: sh -c 'id; sleep infinity' volumes: - ./apk:/apk