diff --git a/app/.Makefile.scripts/make--AndroidManifest.xml b/app/.Makefile.scripts/make--AndroidManifest.xml new file mode 100755 index 0000000..e033664 --- /dev/null +++ b/app/.Makefile.scripts/make--AndroidManifest.xml @@ -0,0 +1,29 @@ +#!/bin/bash + +test -f app-config.sh && { + source app-config.sh +} + +cat > "AndroidManifest.xml" << ANDROIDMANIFEST + + + +$(sed 's/^/ /' <<< "$APP_PERMISSIONS") + + + + + + + + + +ANDROIDMANIFEST + diff --git a/app/.Makefile.scripts/Makefile.android-sdk.sh b/app/.Makefile.scripts/make--android-sdk.sh similarity index 59% rename from app/.Makefile.scripts/Makefile.android-sdk.sh rename to app/.Makefile.scripts/make--android-sdk.sh index d46b5d3..1b14330 100755 --- a/app/.Makefile.scripts/Makefile.android-sdk.sh +++ b/app/.Makefile.scripts/make--android-sdk.sh @@ -52,9 +52,10 @@ test -f android-sdk/.installed.buildtools.version.$APP_VERSION_SDK_TARGET || { sdkmanager --install "$EXACTVERSION_BUILDTOOLS" } echo "$EXACTVERSION_BUILDTOOLS" > android-sdk/.installed.buildtools.version.$APP_VERSION_SDK_TARGET + ln -rvsf android-sdk/.installed.buildtools.version.{$APP_VERSION_SDK_TARGET,current} } -test -f android-sdk/.installed.platform.version.$APP_VERSION_SDK_TARGET || { +test -f android-sdk/.installed.platforms.version.$APP_VERSION_SDK_TARGET || { EXACTVERSION_PLATFORM="$( sdkmanager --list 2>/dev/null | sed 's/^ *//' | @@ -71,43 +72,8 @@ test -f android-sdk/.installed.platform.version.$APP_VERSION_SDK_TARGET || { sdkmanager --list_installed | grep -q "$EXACTVERSION_PLATFORM" || { sdkmanager --install "$EXACTVERSION_PLATFORM" } - echo "$EXACTVERSION_PLATFORM" > android-sdk/.installed.platform.version.$APP_VERSION_SDK_TARGET + echo "$EXACTVERSION_PLATFORM" > android-sdk/.installed.platforms.version.$APP_VERSION_SDK_TARGET + ln -rvsf android-sdk/.installed.platforms.version.{$APP_VERSION_SDK_TARGET,current} } -exec bash - -#test -f android-sdk/.installed.buildtools.version.$APP_VERSION_SDK_TARGET || { # EXACTVERSION_BUILDTOOLS="$( -# sdkmanager --list 2>/dev/null | -# sed 's/^ *//' | -# grep -e 'build-tools;'"$APP_VERSION_SDK_TARGET"'\.[0-9]*\.[0-9]*\ ' | -# cut -f1 -d' ' | -# sort | -# tail -n 1 -# )" -# sdkmanager list_installed | -q grep "$EXACTVERSION_BUILDTOOLS" || { -# sdkmanager --install "$EXACTVERSION_BUILDTOOLS" -# } -# touch android-sdk/.installed.buildtools.version.$APP_VERSION_SDK_TARGET -#} - -#sdkmanager --list | grep build-tools | grep -v rc - -# -#ENV PATH="$BUILD_TOOLS_LATEST/bin:$PATH" -##TODO make this automatic -#ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk/" -#ENV LIBRARY_PATH="$LIBRARY_PATH:$BUILD_TOOLS_LATEST/lib" -#RUN echo you selected to accept the licenses/TOS -#RUN echo "$YESACCEPT" | sdkmanager --install "build-tools;33.0.2" -#RUN echo "$YESACCEPT" | sdkmanager --install "platforms;android-33" -##RUN echo "$YESACCEPT" | sdkmanager --install "ndk;28.0.12433566" -##RUN echo "$YESACCEPT" | sdkmanager --install "system-images;android-33;aosp_atd;x86_64" -##RUN echo "$YESACCEPT" | sdkmanager --install "emulator" -##RUN echo "no" | avdmanager --verbose create avd --force --name "thedevice" --package 'system-images;android-33;aosp_atd;x86_64' --tag "aosp_atd" --abi "x86_64" -##RUN echo "$YESACCEPT" | sdkmanager --install "platform-tools" -#COPY entrypoint.sh /entrypoint.sh -#RUN chown 0:0 /entrypoint.sh -#RUN chmod 0700 /entrypoint.sh -#WORKDIR /apk -#ENTRYPOINT ["/entrypoint.sh"] -#RUN echo "$YESACCEPT" | tee yesaccept +touch android-sdk/installed diff --git a/app/.Makefile.scripts/Makefile.app-config.sh b/app/.Makefile.scripts/make--app-config.sh similarity index 98% rename from app/.Makefile.scripts/Makefile.app-config.sh rename to app/.Makefile.scripts/make--app-config.sh index c54c32d..7b35f2c 100755 --- a/app/.Makefile.scripts/Makefile.app-config.sh +++ b/app/.Makefile.scripts/make--app-config.sh @@ -670,8 +670,9 @@ APP_PERMISSIONS="${APP_PERMISSIONS:-"$(whiptail --nocancel --notags --checklist 'android.permission.WRITE_SMS' 'WRITE_SMS' 0 \ 'android.permission.WRITE_SOCIAL_STREAM' 'WRITE_SOCIAL_STREAM' 0 \ 'android.permission.WRITE_SYNC_SETTINGS' 'WRITE_SYNC_SETTINGS - Allows applications to write the sync settings.' 0 \ -'android.permission.WRITE_VOICEMAIL' 'WRITE_VOICEMAIL - Allows an application to modify and remove existing voicemails in the system.' 0 3>&1 1>&2 2>&3 | - sed 's/"an/\n/g' )"}" +'android.permission.WRITE_VOICEMAIL' 'WRITE_VOICEMAIL - Allows an application to modify and remove existing voicemails in the system.' 0 3>&1 1>&2 2>&3 | + sed 's/$/ /' | + sed 's/"an/\n/g' )"}" @@ -688,36 +689,3 @@ cat << INFO Creating an skeleton for an Android app with the following info: $APP_VALUES INFO -# -# -#cat > "${APP_FOLDER}/AndroidManifest.xml" << ANDROIDMANIFEST -# -# -# -#$(sed 's/^/ /' <<< "$APP_PERMISSIONS") -# -# -# -# -# -# -# -# -# -#ANDROIDMANIFEST -# -#cat Dockerfile > "${APP_FOLDER}/Dockerfile" -#cat >> "${APP_FOLDER}/Dockerfile" << DOCKERFILEADDITION -#RUN echo "$YESACCEPT" | sdkmanager --install "build-tools;33.0.2" -#RUN echo "$YESACCEPT" | sdkmanager --install "platforms;android-33" -#DOCKERFILEADDITION -# -# -# diff --git a/app/Makefile b/app/Makefile index 41427e4..0c18963 100644 --- a/app/Makefile +++ b/app/Makefile @@ -1,46 +1,124 @@ -android-sdk: app-config.sh - ./.Makefile.scripts/Makefile.android-sdk.sh +SHELL=/bin/bash - -app-config.sh: FORCE - ./.Makefile.scripts/Makefile.app-config.sh +#shell: +# bash +app.apk: ./result/app.apk + ln -srv ./result/app.apk ./app.apk + +./result/app.apk : ./result/signed.apk app-config.sh + source app-config.sh; $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.buildtools.version.current)/zipalign -v -f 4 $< $@ + source app-config.sh; $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.buildtools.version.current)/apksigner sign \ + --ks ToyKey.keystore --key-pass pass:armena --ks-pass pass:armena $@ + +./result/signed.apk : ./result/unsigned.apk ./ToyKey.keystore ./result + jarsigner -verbose -keystore ./ToyKey.keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey + +android-sdk/installed: app-config.sh + ./.Makefile.scripts/make--android-sdk.sh AndroidManifest.xml: app-config.sh - ./.Makefile.scripts/Makefile.AndroidManifest.xml + ./.Makefile.scripts/make--AndroidManifest.xml + +app-config.sh: + ./.Makefile.scripts/make--app-config.sh +srcj/package: app-config.sh + source app-config.sh; PKGDIR=$$(echo "$$APP_PACKAGE" | tr '.' '/'); mkdir -p src/$$PKGDIR; ln -srv src/$$PKGDIR $@ -app.apk: - echo hallo +obj/package: app-config.sh + source app-config.sh; PKGDIR=$$(echo "$$APP_PACKAGE" | tr '.' '/'); mkdir -p obj/$$PKGDIR; ln -srv obj/$$PKGDIR $@ + +./result /bin /assets /src/ obj: + mkdir -p "$@" + +./ToyKey.keystore : + keytool -genkeypair -validity 1000 -dname "CN=alexander,O=Android,C=JPN" -keystore $@ \ + -storepass armena -keypass armena -alias helljniKey -keyalg RSA -v + +./src/package/R.java : $(shell find ./res -type f) app-config.sh src/package + source app-config.sh; $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.buildtools.version.current)/aapt package \ + -v -f -m -S ./res -J ./src -M ./AndroidManifest.xml \ + -I $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.platforms.version.current)/android.jar + +./obj/package/AppActivity.class : ./src/package/AppActivity.java ./src/package/R.java obj/package + javac -d ./obj -classpath $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.platforms.version.current)/android.jar \ + -sourcepath ./src $< + + +./result/signed.apk : ./result/unsigned.apk ./ToyKey.keystore ./result + jarsigner -verbose -keystore ./ToyKey.keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey + + +./result/unsigned.apk : ./bin/classes.dex ./result ./assets + rm -rvf "$@" + source app-config.sh; $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.buildtools.version.current)/aapt package \ + -v -u -f -M ./AndroidManifest.xml -S ./res \ + -I $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.platforms.version.current)/android.jar -A ./assets -F $@ ./bin + + +./bin/classes.dex : ./obj/package/AppActivity.class ./obj/package/AppActivity$$1.class /bin + source app-config.sh; $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.buildtools.version.current)/d8 ./obj/package/*.class \ + --lib $${ANDROID_SDK_ROOT}/$$(tr ';' '/' < android-sdk/.installed.platforms.version.current)/android.jar --output bin FORCE: - true + @true + +#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 -### this includes explicit rules -##include Makefile.apps -##Makefile.apps: Makefile apps -## @./Makefile.make.Makefile.apps.sh -## -##apps: -## mkdir "$@" -## -##install: $(shell for APP in apps/*/; do test -d "$$APP" || continue; echo "$$APP""app.apk.install-log"; done) -##force-install reinstall: -## for APP in apps/*/; do rm -f "$$APP""app.apk.install-log" 2>/dev/null; done; $(MAKE) install -##run: $(shell cd apps/; for APP in */; do test -d "$$APP" || continue; echo "run-$${APP%/}"; done) -## -##docker-compose-build.log: Dockerfile compose.yml -## docker-compose down --remove-orphans --rmi all -## BUILDKIT_PROGRESS=plain docker-compose build | tee docker-compose-build.log -## -##new-app: FORCE -## ./Makefile.make.new-app.sh -## -##FORCE: -## @true + +#all: build +# +#.PHONY : build +#.PHONY : deploy +#.PHONY : clean +# +#build : ./result/example.app.apk +# mv ./result/example.app.apk app.apk +# true +# +#env: +# set > set ; env > env +#./result/example.app.apk : ./result/signed.apk +# $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/zipalign -v -f 4 $< $@ +# $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/apksigner sign --ks ToyKey.keystore --key-pass pass:armena --ks-pass pass:armena $@ +# +#./result/signed.apk : ./result/unsigned.apk ./ToyKey.keystore ./result +# jarsigner -verbose -keystore ./ToyKey.keystore -storepass armena -keypass armena -signedjar $@ $< helljniKey +# +#./result: +# mkdir -p "$@" +# +#./result/unsigned.apk : ./bin/classes.dex ./result +# rm -rvf "$@" +# $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/aapt package -v -u -f -M ./AndroidManifest.xml -S ./res \ +# -I $(ANDROID_HOME)/platforms/$(PLATFORM)/android.jar -A ./assets -F $@ ./bin +# +#./bin/classes.dex : ./obj/app/example/ExampleApp.class ./obj/app/example/ExampleApp$$1.class +# $(ANDROID_HOME)/build-tools/$(ANDROID_VERSION)/d8 ./obj/app/example/*.class --lib $(ANDROID_HOME)/platforms/$(PLATFORM)/android.jar --output bin +# +#./src/app/example/R.java : $(shell find ./res -type f) +# $(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/app/example/ExampleApp.class : ./src/app/example/ExampleApp.java ./src/app/example/R.java +# javac -d ./obj -classpath $(ANDROID_HOME)/platforms/$(PLATFORM)/android.jar -sourcepath ./src $< +# +#./ToyKey.keystore : +# keytool -genkeypair -validity 1000 -dname "CN=alexander,O=Android,C=JPN" -keystore $@ \ +# -storepass armena -keypass armena -alias helljniKey -keyalg RSA -v +# +#clean: +# rm -f ./bin/* ./lib/arm64-v8a/* ./result/* +