diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7a6246d..492c8f8 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -19,7 +19,7 @@ jobs:
- name: Set up Android NDK
uses: nttld/setup-ndk@v1
with:
- ndk-version: r28b
+ ndk-version: r29
- name: Build proot
run: |
@@ -40,25 +40,15 @@ jobs:
run: |
echo "${{ secrets.KEYSTORE }}" | base64 -d > /tmp/release.keystore
- - name: Build release APK
+ - name: Build release APK and AAB
if: github.ref == 'refs/heads/main'
env:
GABE_RELEASE_KEYSTORE_FILE: /tmp/release.keystore
- GABE_RELEASE_SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
+ GABE_RELEASE_STORE_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
GABE_RELEASE_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
GABE_RELEASE_KEY_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
run: |
- ./gradlew assembleRelease
-
- - name: Build release AAB
- if: github.ref == 'refs/heads/main'
- env:
- GABE_RELEASE_KEYSTORE_FILE: /tmp/release.keystore
- GABE_RELEASE_SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
- GABE_RELEASE_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
- GABE_RELEASE_KEY_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
- run: |
- ./gradlew bundleRelease
+ ./gradlew assembleRelease bundleRelease
- name: Upload debug artifacts
uses: actions/upload-artifact@v4
diff --git a/app/build.gradle b/app/build.gradle
index e30c01e..e13bd62 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,8 +7,8 @@ plugins {
android {
namespace = 'org.godotengine.godot_gradle_build_environment'
- compileSdk = 35
- ndkVersion = '28.1.13356709'
+ compileSdk = 36
+ ndkVersion = '29.0.14206865'
def keystoreFile = System.getenv("GABE_RELEASE_KEYSTORE_FILE")
@@ -23,7 +23,7 @@ android {
defaultConfig {
applicationId = "org.godotengine.godot_gradle_build_environment"
minSdk = 24
- targetSdk = 35
+ targetSdk = 36
versionCode = 2
versionName = "0.2"
@@ -34,7 +34,7 @@ android {
signingConfigs {
release {
storeFile file(System.getenv("GABE_RELEASE_KEYSTORE_FILE"))
- storePassword System.getenv("GABE_RELEASE_SIGNING_PASSWORD")
+ storePassword System.getenv("GABE_RELEASE_STORE_PASSWORD")
keyAlias System.getenv("GABE_RELEASE_KEY_ALIAS")
keyPassword System.getenv("GABE_RELEASE_KEY_PASSWORD")
}
diff --git a/app/src/main/java/org/godotengine/godot_gradle_build_environment/MainScreen.kt b/app/src/main/java/org/godotengine/godot_gradle_build_environment/MainScreen.kt
index 2ca5869..3d47873 100644
--- a/app/src/main/java/org/godotengine/godot_gradle_build_environment/MainScreen.kt
+++ b/app/src/main/java/org/godotengine/godot_gradle_build_environment/MainScreen.kt
@@ -1,11 +1,8 @@
package org.godotengine.godot_gradle_build_environment
import android.content.Context
+import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Build
-import androidx.compose.material.icons.filled.List
-import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -22,6 +19,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.vectorResource
import org.godotengine.godot_gradle_build_environment.screens.ProjectsScreen
import org.godotengine.godot_gradle_build_environment.screens.RootfsScreen
import org.godotengine.godot_gradle_build_environment.screens.SettingsScreen
@@ -29,11 +27,11 @@ import java.io.File
enum class AppTab(
val label: String,
- val icon: ImageVector
+ @DrawableRes val icon: Int
) {
- PROJECTS("Projects", Icons.Filled.List),
- ROOTFS("Rootfs", Icons.Filled.Build),
- SETTINGS("Settings", Icons.Filled.Settings),
+ PROJECTS("Projects", R.drawable.icon_projects_tab),
+ ROOTFS("Rootfs", R.drawable.icon_rootfs_tab),
+ SETTINGS("Settings", R.drawable.icon_settings),
}
@OptIn(ExperimentalMaterial3Api::class)
@@ -59,7 +57,7 @@ fun MainScreen(
NavigationBar {
AppTab.entries.forEach { tab ->
NavigationBarItem(
- icon = { Icon(tab.icon, contentDescription = tab.label) },
+ icon = { Icon(ImageVector.vectorResource(tab.icon), contentDescription = tab.label) },
label = { Text(tab.label) },
selected = selectedTab == tab,
onClick = { selectedTab = tab }
diff --git a/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/ProjectsScreen.kt b/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/ProjectsScreen.kt
index 1feadc4..5d15f64 100644
--- a/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/ProjectsScreen.kt
+++ b/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/ProjectsScreen.kt
@@ -22,9 +22,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Delete
-import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CircularProgressIndicator
@@ -44,7 +41,9 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@@ -53,6 +52,7 @@ import org.godotengine.godot_gradle_build_environment.BuildEnvironmentService
import org.godotengine.godot_gradle_build_environment.CachedProject
import org.godotengine.godot_gradle_build_environment.FileUtils
import org.godotengine.godot_gradle_build_environment.ProjectInfo
+import org.godotengine.godot_gradle_build_environment.R
@Composable
fun ProjectsScreen(modifier: Modifier = Modifier) {
@@ -253,7 +253,7 @@ private fun ProjectItem(
} else {
IconButton(onClick = onRefresh) {
Icon(
- imageVector = Icons.Filled.Refresh,
+ imageVector = ImageVector.vectorResource(R.drawable.icon_refresh),
contentDescription = "Refresh size",
tint = MaterialTheme.colorScheme.primary
)
@@ -268,7 +268,7 @@ private fun ProjectItem(
} else {
IconButton(onClick = onDelete) {
Icon(
- imageVector = Icons.Filled.Delete,
+ imageVector = ImageVector.vectorResource(R.drawable.icon_delete),
contentDescription = "Delete project cache",
tint = MaterialTheme.colorScheme.error
)
diff --git a/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/SettingsScreen.kt b/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/SettingsScreen.kt
index 1a2e3ef..34284b2 100644
--- a/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/SettingsScreen.kt
+++ b/app/src/main/java/org/godotengine/godot_gradle_build_environment/screens/SettingsScreen.kt
@@ -19,8 +19,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
@@ -42,12 +40,16 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.godotengine.godot_gradle_build_environment.AppPaths
import org.godotengine.godot_gradle_build_environment.BuildEnvironmentService
import org.godotengine.godot_gradle_build_environment.FileUtils
+import org.godotengine.godot_gradle_build_environment.R
import org.godotengine.godot_gradle_build_environment.SettingsManager
@Composable
@@ -201,7 +203,7 @@ fun SettingsScreen(
} else {
IconButton(onClick = { onRefresh() }) {
Icon(
- imageVector = Icons.Filled.Refresh,
+ imageVector = ImageVector.vectorResource(R.drawable.icon_refresh),
contentDescription = "Refresh cache size",
tint = MaterialTheme.colorScheme.primary
)
diff --git a/app/src/main/res/drawable/icon_delete.xml b/app/src/main/res/drawable/icon_delete.xml
new file mode 100644
index 0000000..f538c1c
--- /dev/null
+++ b/app/src/main/res/drawable/icon_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/icon_projects_tab.xml b/app/src/main/res/drawable/icon_projects_tab.xml
new file mode 100644
index 0000000..8f6cdcd
--- /dev/null
+++ b/app/src/main/res/drawable/icon_projects_tab.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/icon_refresh.xml b/app/src/main/res/drawable/icon_refresh.xml
new file mode 100644
index 0000000..9e15ee1
--- /dev/null
+++ b/app/src/main/res/drawable/icon_refresh.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/icon_rootfs_tab.xml b/app/src/main/res/drawable/icon_rootfs_tab.xml
new file mode 100644
index 0000000..1fa4fc6
--- /dev/null
+++ b/app/src/main/res/drawable/icon_rootfs_tab.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/icon_settings.xml b/app/src/main/res/drawable/icon_settings.xml
new file mode 100644
index 0000000..0b0cc87
--- /dev/null
+++ b/app/src/main/res/drawable/icon_settings.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1255ed7..c033fe4 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,16 +1,16 @@
[versions]
-agp = "8.13.0"
+agp = "8.13.2"
commonsCompress = "1.28.0"
-kotlin = "2.0.21"
-kotlinxSerialization = "1.7.3"
-coreKtx = "1.13.1"
+kotlin = "2.3.10"
+kotlinxSerialization = "1.10.0"
+coreKtx = "1.17.0"
junit = "4.13.2"
junitVersion = "1.3.0"
espressoCore = "3.7.0"
-lifecycleRuntimeKtx = "2.9.3"
-activityCompose = "1.10.1"
-composeBom = "2024.09.00"
-xz = "1.10"
+lifecycleRuntimeKtx = "2.10.0"
+activityCompose = "1.12.3"
+composeBom = "2026.01.01"
+xz = "1.11"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }