diff --git a/app/CHANGELOG.md b/app/CHANGELOG.md
new file mode 100644
index 0000000..fcf0ac7
--- /dev/null
+++ b/app/CHANGELOG.md
@@ -0,0 +1,27 @@
+# Changelog
+
+Version history for HyperGames.
+
+## 0.1.0 (2026-11-04)
+
+**Internal Facelift**
+
+- Newer Android SDKs
+ - Icon is the correct size, no longer gets padded.
+ - Screens no longer get hidden by action bar.
+- Upgrades
+ - Migrated from AppCompat libraries to AndroidX.
+ - Updated plugin versions such as AGP and Gradle.
+- APK for release is now filtered to arm-v8a.
+
+minSDK is now 21 from 14.
+
+## 0.0.11 (2025-07-22)
+
+- Minify the APK. Reduced from 1.7MB to 1.3MB with a single setting change.
+- Deleted APK from the previous release since no other changes were made.
+
+## 0.0.10 (2025-07-22)
+
+- Begin targeting SDK 36 (Android 16).
+- Remove ad-related code.
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100755
index d76bd63..0000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,38 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- namespace "com.hyperling.apps.games"
- compileSdkVersion 36
- defaultConfig {
- applicationId "apps.hyperling.com.platformer"
- minSdkVersion 14
- targetSdkVersion 36
- versionCode 12
- versionName "0.0.11"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- minifyEnabled true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-dependencies {
- /*
- compile fileTree(dir: 'libs', include: ['*.jar'])
- androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- compile 'com.android.support:appcompat-v7:24.2.1'
- testCompile 'junit:junit:4.12'
- */
-
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- // https://mvnrepository.com/artifact/com.android.support/appcompat-v7
- implementation group: 'com.android.support', name: 'appcompat-v7', version: '28.0.0'
-}
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 0000000..f475d97
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,50 @@
+plugins {
+ alias(libs.plugins.androidApplication)
+}
+
+android {
+ namespace = "com.hyperling.apps.games"
+ compileSdk = 37
+
+ defaultConfig {
+ applicationId = "apps.hyperling.com.platformer"
+ minSdk = 21
+ targetSdk = 37
+ versionCode = 13
+ versionName = "0.1.0"
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+
+ kotlin {
+ compilerOptions {
+ jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
+ }
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = true
+ isShrinkResources = true
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ ndk {
+ abiFilters += listOf("arm64-v8a")
+ }
+ }
+ }
+}
+
+dependencies {
+ implementation(libs.androidx.appcompat)
+
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.junit.ext)
+ androidTestImplementation(libs.espresso.core)
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bc9c177..ec9cc0e 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,11 +1,6 @@
-
-
-
-
+ xmlns:tools="http://schemas.android.com/tools">
-
\ No newline at end of file
+
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..79afd0c
Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ
diff --git a/app/src/main/java/com/hyperling/apps/games/GameActivity.java b/app/src/main/java/com/hyperling/apps/games/GameActivity.java
index 96edaa1..7b6c796 100755
--- a/app/src/main/java/com/hyperling/apps/games/GameActivity.java
+++ b/app/src/main/java/com/hyperling/apps/games/GameActivity.java
@@ -1,7 +1,7 @@
package com.hyperling.apps.games;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
diff --git a/app/src/main/java/com/hyperling/apps/games/HighScoreActivity.java b/app/src/main/java/com/hyperling/apps/games/HighScoreActivity.java
index ae90619..91167cb 100755
--- a/app/src/main/java/com/hyperling/apps/games/HighScoreActivity.java
+++ b/app/src/main/java/com/hyperling/apps/games/HighScoreActivity.java
@@ -1,7 +1,7 @@
package com.hyperling.apps.games;
import android.content.SharedPreferences;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
diff --git a/app/src/main/java/com/hyperling/apps/games/MainActivity.java b/app/src/main/java/com/hyperling/apps/games/MainActivity.java
index 7a7cb0e..7ebf712 100755
--- a/app/src/main/java/com/hyperling/apps/games/MainActivity.java
+++ b/app/src/main/java/com/hyperling/apps/games/MainActivity.java
@@ -2,7 +2,7 @@ package com.hyperling.apps.games;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
diff --git a/app/src/main/java/com/hyperling/apps/games/OptionsActivity.java b/app/src/main/java/com/hyperling/apps/games/OptionsActivity.java
index 9679043..8970af3 100755
--- a/app/src/main/java/com/hyperling/apps/games/OptionsActivity.java
+++ b/app/src/main/java/com/hyperling/apps/games/OptionsActivity.java
@@ -3,7 +3,7 @@ package com.hyperling.apps.games;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml
new file mode 100644
index 0000000..a1b84c0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_high_score.xml b/app/src/main/res/layout/activity_high_score.xml
index 3b9ad16..a061161 100755
--- a/app/src/main/res/layout/activity_high_score.xml
+++ b/app/src/main/res/layout/activity_high_score.xml
@@ -9,7 +9,7 @@
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
- android:layout_marginTop="?android:actionBarSize"
+ android:fitsSystemWindows="true"
tools:context="com.hyperling.apps.games.HighScoreActivity">
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..081998b
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index cde69bc..a5bc8b0 100755
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..8cd6b32
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..a5bc8b0
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index c133a0c..af98605 100755
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..02a5e75
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..af98605
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index bfa42f0..371828b 100755
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..feee4a8
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..371828b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 324e72c..50e68c3 100755
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..7483ef7
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..50e68c3
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index aee44e1..bc6792b 100755
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..96d40da
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..bc6792b
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 0000000..f21f12b
--- /dev/null
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #6400C8
+
\ No newline at end of file
diff --git a/apps.hyperling.com.platformer.yml b/apps.hyperling.com.platformer.yml
index 61506e6..cab9ef2 100644
--- a/apps.hyperling.com.platformer.yml
+++ b/apps.hyperling.com.platformer.yml
@@ -1,11 +1,16 @@
AuthorName: 'Chad Michael "Hyperling" Greenwood'
-SourceCode: 'https://git.hyperling.com/me/android-hypergames/'
-WebSite: 'https://hyperling.com/apps'
+AuthorWebSite: 'https://hyperling.com/about/'
+Donate: 'https://hyperling.com/donate/'
+Liberapay: 'HyperVegan'
+Bitcoin: 'bc1qsfe8dkvry3d34kztz449gkq67wq8fu2nkgfkh0'
+Litecoin: 'ltc1qavmpu5d6ljntxsd6jj548m4yys83zwscl0dzkx'
+IssueTracker: 'https://hyperling.com/contact/'
Categories:
- fdroid
- hyperling
- games
-CurrentVersionCode: 2147483647
-IssueTracker: 'mailto:me@hyperling.com'
Name: Hyper Games
+AuthorEmail: 'me+hypergames@hyperling.com'
Summary: 'Started as a fun project for learning. Playable but unfinished.'
+SourceCode: 'https://git.hyperling.com/me/android-hypergames/'
+WebSite: 'https://hyperling.com/apps/#games'
diff --git a/build.gradle b/build.gradle
deleted file mode 100755
index bfc1796..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,32 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
- repositories {
- mavenCentral()
- maven {
- url 'https://jitpack.io'
- }
- google()
- maven {
- url 'https://maven.google.com/'
- name 'Google'
- }
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:8.11.1'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- mavenCentral()
- google()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..c49091b
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1 @@
+// Root build file - plugins managed via gradle/libs.versions.toml
diff --git a/gradle.properties b/gradle.properties
index aac7c9b..88f1374 100755
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,3 +15,7 @@ org.gradle.jvmargs=-Xmx1536m
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+
+# Move to AndroidX
+android.useAndroidX=true
+# android.enableJetifier removed - all support libs migrated to AndroidX
\ No newline at end of file
diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties
new file mode 100644
index 0000000..fa4ed51
--- /dev/null
+++ b/gradle/gradle-daemon-jvm.properties
@@ -0,0 +1,12 @@
+#This file is generated by updateDaemonJvm
+toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
+toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
+toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
+toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
+toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect
+toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect
+toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
+toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
+toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect
+toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect
+toolchainVersion=25
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
new file mode 100644
index 0000000..d2d272d
--- /dev/null
+++ b/gradle/libs.versions.toml
@@ -0,0 +1,19 @@
+[versions]
+agp = "9.5.0"
+kotlin = "2.4.21"
+coreKtx = "1.19.1"
+appcompat = "1.7.1"
+espressoCore = "3.7.0"
+junit = "4.13.2"
+junitVersion = "1.3.0"
+
+[libraries]
+androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
+androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
+junit = { group = "junit", name = "junit", version.ref = "junit" }
+junit-ext = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
+
+[plugins]
+androidApplication = { id = "com.android.application", version.ref = "agp" }
+kotlinCompose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 275e5b5..a445ea8 100755
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Thu Jan 10 06:49:36 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100755
index e7b4def..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..d06488f
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,19 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ maven { url = uri("https://jitpack.io") }
+ }
+}
+
+rootProject.name = "HyperGames"
+include(":app")