From db091bfd1db36ab66340ccad2eb7b6393a0aa3da Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Thu, 13 Apr 2023 23:53:48 +0200 Subject: Basic kotlin java application working --- .gitignore | 10 ++++++++ .vars.rc.do | 57 ++++++++++++++++++++++++++++++++++++++++++++ AndroidManifest.xml | 14 +++++++++++ MainActivity.kt | 25 +++++++++++++++++++ R.java.do | 13 ++++++++++ all.do | 1 + clean | 4 ++++ default.apk.do | 21 ++++++++++++++++ default.flat.do | 14 +++++++++++ default.jar.do | 22 +++++++++++++++++ default.signed.apk.do | 10 ++++++++ kotlin.dex.do | 11 +++++++++ paste.dex.do | 12 ++++++++++ res/layout/activity_main.xml | 42 ++++++++++++++++++++++++++++++++ res/values/strings.xml | 9 +++++++ res/values/styles.xml | 6 +++++ resources.rc | 1 + 17 files changed, 272 insertions(+) create mode 100644 .gitignore create mode 100644 .vars.rc.do create mode 100644 AndroidManifest.xml create mode 100644 MainActivity.kt create mode 100644 R.java.do create mode 100644 all.do create mode 100755 clean create mode 100644 default.apk.do create mode 100644 default.flat.do create mode 100644 default.jar.do create mode 100644 default.signed.apk.do create mode 100644 kotlin.dex.do create mode 100644 paste.dex.do create mode 100644 res/layout/activity_main.xml create mode 100644 res/values/strings.xml create mode 100644 res/values/styles.xml create mode 100644 resources.rc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fbc55e6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.aar +*.apk +*.dex +*.flat +*.idsig +*.jar +.redo/ +.vars.rc +R.java +config.rc diff --git a/.vars.rc.do b/.vars.rc.do new file mode 100644 index 0000000..f9ccc80 --- /dev/null +++ b/.vars.rc.do @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +set -e + +unset ANDROID_SDK ANDROID_VER BUILD_TOOLS BUILD_TOOLS_VER JAVAC KEYSTORE KEYSTORE_ARGS KEYSTORE_PASS KOTLIN KOTLINC PLATFORM verbose + +ANDROID_VER=android-33-ext5 +BUILD_TOOLS_VER=33.0.2 +APKSIGNER_SIGN_ARGS=() + +if [ -e config.rc ]; then + redo-ifchange config.rc + . ./config.rc +else + redo-ifcreate config.rc +fi + +if [[ ! ( $BUILD_TOOLS || $PLATFORM ) && ! $ANDROID_SDK ]]; then + cat <<-"EOF" >&2 + $BUILD_TOOLS or $PLATFORM unset without setting $ANDROID_SDK. + Either set both $BUILD_TOOLS and $PLATFORM or set $ANDROID_SDK. + EOF + exit 1 +fi + +BUILD_TOOLS=${BUILD_TOOLS-$ANDROID_SDK/build-tools/$BUILD_TOOLS_VER} +PLATFORM=${PLATFORM-$ANDROID_SDK/platforms/$ANDROID_VER} +KOTLIN=${KOTLIN-/usr/share/kotlin} + +KEYSTORE=${KEYSTORE-$HOME/.android/debug.keystore} +KEYSTORE_PASS=${KEYSTORE_PASS-pass:android} + +check() { + what=$1 + shift + for p do + if command -v "$p" >/dev/null 2>&1; then + command -v "$p" + return + fi + done + echo "$what not set or found" >&2 + return 1 +} + +JAVAC=$(check '$JAVAC or javac' "$JAVAC" javac) || exit +KOTLINC=$(check '$KOTLINC or kotlinc' "$KOTLINC" kotlinc) || exit + +{ + printf "# generated by %s\n" "$0" + declare -p APKSIGNER_SIGN_ARGS BUILD_TOOLS JAVAC KEYSTORE KEYSTORE_PASS KOTLIN KOTLINC PLATFORM +} >"$3" + +if [[ $verbose ]]; then + echo "# Configuration regenerated:" >&2 + cat "$3" >&2 +fi +# vim:ft=bash diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..7f77dd9 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/MainActivity.kt b/MainActivity.kt new file mode 100644 index 0000000..b11b0fc --- /dev/null +++ b/MainActivity.kt @@ -0,0 +1,25 @@ +package ski.kramkow.paste + +import android.app.Activity +import android.os.Bundle +//import java.net.HttpURLConnection; +//import java.net.URL; +//import java.io.OutputStream; + +class MainActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + //URL url = new URL("http://192.168.1.32:8000"); + //HttpURLConnection con = (HttpURLConnection)url.openConnection(); + //con.setRequestMethod("POST"); + //con.setRequestProperty("Content-Type", "text/plain"); + //con.setDoOutput(true); + //String data = "This is a test\n"; + //try(OutputStream os = con.getOutputStream()) { + //byte[] block = data.getBytes("utf-8"); + //os.write(block, 0, block.length); + //} + } +} diff --git a/R.java.do b/R.java.do new file mode 100644 index 0000000..30389fe --- /dev/null +++ b/R.java.do @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -e +redo-ifchange .vars.rc resources.rc +. ./.vars.rc +. ./resources.rc +android="$PLATFORM/android.jar" +manifest=AndroidManifest.xml +redo-ifchange "$BUILD_TOOLS/aapt2" "$android" "$manifest" "${resources[@]}" +tmp=$(mktemp -d) +trap 'rm -rf "$tmp"' EXIT +"$BUILD_TOOLS/aapt2" link --java "$tmp" --manifest "$manifest" -o /dev/null -I "$android" "${resources[@]}" +find "$tmp" -name "R.java" -exec mv {} "$3" \; -quit +# vim:ft=bash diff --git a/all.do b/all.do new file mode 100644 index 0000000..61718ed --- /dev/null +++ b/all.do @@ -0,0 +1 @@ +redo-ifchange paste.signed.apk diff --git a/clean b/clean new file mode 100755 index 0000000..0313ccb --- /dev/null +++ b/clean @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +rm -f .vars.rc R.java +find . \( -name '*.apk' -o -name '*.dex' -o -name '*.flat' -o -name '*.idsig' -o -name '*.jar' -o -name '*.aar' \) -delete diff --git a/default.apk.do b/default.apk.do new file mode 100644 index 0000000..e56df77 --- /dev/null +++ b/default.apk.do @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -e + +redo-ifchange .vars.rc resources.rc +. ./.vars.rc +. ./resources.rc + +src=${1%.apk}.dex + +android="$PLATFORM/android.jar" +manifest=AndroidManifest.xml + +redo-ifchange "$BUILD_TOOLS/aapt2" "$BUILD_TOOLS/zipalign" "${resources[@]}" "$src" "$manifest" "$android" + +tmp=$(mktemp) +trap 'rm -f "$tmp"' EXIT +"$BUILD_TOOLS/aapt2" link --manifest "$manifest" -o "$tmp" -I "$android" "${resources[@]}" +7z a -tzip "$tmp" "$src" +7z rn -tzip "$tmp" "$src" classes.dex +"$BUILD_TOOLS/zipalign" -f 4 "$tmp" "$3" +# vim:ft=bash diff --git a/default.flat.do b/default.flat.do new file mode 100644 index 0000000..e8b2558 --- /dev/null +++ b/default.flat.do @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -e +src=${1%.flat} +dir=${src%%_*} +file=${src#*_} +src=res/$dir/$file +redo-ifchange .vars.rc +. ./.vars.rc +redo-ifchange "$BUILD_TOOLS/aapt2" "$src" +tmp=$(mktemp) +trap 'rm -f "$tmp"' EXIT +"$BUILD_TOOLS/aapt2" compile -o "$tmp" "$src" +unzip -p "$tmp" >"$3" +# vim:ft=bash diff --git a/default.jar.do b/default.jar.do new file mode 100644 index 0000000..a324074 --- /dev/null +++ b/default.jar.do @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -e +src=${1%.jar} +redo-ifchange .vars.rc +. ./.vars.rc +classpath=($PLATFORM/android.jar) +tmp=$(mktemp -d) +trap 'rm -rf "$tmp"' EXIT +if [[ $1 != R.jar ]]; then classpath+=(R.jar); fi +for e in "${classpath[@]}"; do redo-ifchange "$e"; done +IFS=:; classpath=${classpath[*]} +if [[ -f "$src.kt" ]]; then + src="$src.kt" + redo-ifchange "$KOTLINC" "$src" + "$KOTLINC" -jvm-target 1.8 -cp "$classpath" -d "$tmp" "$src" +else + src="$src.java" + redo-ifchange "$JAVAC" "$src" + "$JAVAC" -source 11 -target 11 -classpath "$classpath" -d "$tmp" "$src" +fi +jar --create --no-compress --date=2000-01-01T00:00:00Z --file "$3" -C "$tmp" . +# vim:ft=bash diff --git a/default.signed.apk.do b/default.signed.apk.do new file mode 100644 index 0000000..c2c5d48 --- /dev/null +++ b/default.signed.apk.do @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e +src=${1%.signed.apk}.apk +redo-ifchange .vars.rc +. ./.vars.rc +if [[ $KEYSTORE_PASS =~ ^file: ]]; then redo-ifchange "${KEYSTORE_PASS#file:}"; fi +redo-ifchange "$BUILD_TOOLS/apksigner" "$KEYSTORE" "$src" +"$BUILD_TOOLS/apksigner" sign --ks "$KEYSTORE" --ks-pass "$KEYSTORE_PASS" "${APKSIGNER_SIGN_ARGS[@]}" --out "$3" "$src" +rm "$3.idsig" +# vim:ft=bash diff --git a/kotlin.dex.do b/kotlin.dex.do new file mode 100644 index 0000000..5cd3eef --- /dev/null +++ b/kotlin.dex.do @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e +redo-ifchange .vars.rc +. ./.vars.rc +src="$KOTLIN/lib/kotlin-stdlib.jar" +redo-ifchange "$BUILD_TOOLS/d8" "$PLATFORM/android.jar" "$src" +tmp=$(mktemp -d) +trap 'rm -rf "$tmp"' EXIT +"$BUILD_TOOLS/d8" --intermediate "$src" --classpath "$PLATFORM/android.jar" --output "$tmp" +mv "$tmp/classes.dex" "$3" +# vim:ft=bash diff --git a/paste.dex.do b/paste.dex.do new file mode 100644 index 0000000..53ec7c2 --- /dev/null +++ b/paste.dex.do @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -e +jars=(R.jar MainActivity.jar) +redo-ifchange .vars.rc +. ./.vars.rc +android="$PLATFORM/android.jar" +redo-ifchange "$BUILD_TOOLS/d8" "$android" kotlin.dex "${jars[@]}" +tmp=$(mktemp -d) +trap 'rm -rf "$tmp"' EXIT +"$BUILD_TOOLS/d8" --classpath "$android" --output "$tmp" kotlin.dex "${jars[@]}" +mv "$tmp/classes.dex" "$3" +# vim:ft=bash diff --git a/res/layout/activity_main.xml b/res/layout/activity_main.xml new file mode 100644 index 0000000..0807716 --- /dev/null +++ b/res/layout/activity_main.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + +