Skip to content

Commit 8381846

Browse files
chore: Merge branch dev to main (#75)
2 parents 8591ff4 + 8beab4b commit 8381846

61 files changed

Lines changed: 12112 additions & 68 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@ jobs:
1515
runs-on: ubuntu-latest
1616
steps:
1717
- name: Checkout
18-
uses: actions/checkout@v4
18+
uses: actions/checkout@v6
1919
with:
2020
# Make sure the release step uses its own credentials:
2121
# https://github.com/cycjimmy/semantic-release-action#private-packages
2222
persist-credentials: false
2323
fetch-depth: 0
2424

2525
- name: Cache Gradle
26-
uses: burrunan/gradle-cache-action@v1
26+
uses: burrunan/gradle-cache-action@v3
2727

2828
- name: Build
2929
env:
3030
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31-
run: ./gradlew clean build
31+
run: ./gradlew build clean
3232

3333
- name: Setup Node.js
34-
uses: actions/setup-node@v4
34+
uses: actions/setup-node@v6
3535
with:
3636
node-version: "lts/*"
3737
cache: 'npm'

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ misc.xml
2323
deploymentTargetDropDown.xml
2424
render.experimental.xml
2525

26+
# Kotlin
27+
.kotlin/
28+
2629
# Keystore files
2730
*.jks
2831
*.keystore
@@ -33,5 +36,7 @@ google-services.json
3336
# Android Profiling
3437
*.hprof
3538

39+
# Mac files
40+
.DS_Store
3641
# NPM modules
3742
node_modules/

.run/CLI GUI.run.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="CLI GUI" type="Application" factoryName="Application">
3+
<option name="MAIN_CLASS_NAME" value="app.morphe.MorpheLauncherKt" />
4+
<module name="morphe-cli.main" />
5+
<method v="2">
6+
<option name="Make" enabled="true" />
7+
</method>
8+
</configuration>
9+
</component>

CHANGELOG.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,80 @@
1+
# [1.6.0-dev.8](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.7...v1.6.0-dev.8) (2026-03-21)
2+
3+
4+
### Bug Fixes
5+
6+
* Use GitHub raw links for CLI update check ([#87](https://github.com/MorpheApp/morphe-cli/issues/87)) ([2aa6263](https://github.com/MorpheApp/morphe-cli/commit/2aa62637098fa52dcc79422116b91487aed5600a))
7+
8+
# [1.6.0-dev.7](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.6...v1.6.0-dev.7) (2026-03-20)
9+
10+
11+
### Bug Fixes
12+
13+
* Update to latest patcher dev ([496d8e9](https://github.com/MorpheApp/morphe-cli/commit/496d8e9d2d1e402f7246b6f3adb85c4c6c1865ca))
14+
15+
# [1.6.0-dev.6](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.5...v1.6.0-dev.6) (2026-03-20)
16+
17+
18+
### Features
19+
20+
* Inform user if cli is outdated ([#81](https://github.com/MorpheApp/morphe-cli/issues/81)) ([5bcd4f7](https://github.com/MorpheApp/morphe-cli/commit/5bcd4f7c612ec3aad732e83ea131a019424b3bb8))
21+
22+
# [1.6.0-dev.5](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.4...v1.6.0-dev.5) (2026-03-16)
23+
24+
25+
### Bug Fixes
26+
27+
* Update to latest patcher dev ([1356259](https://github.com/MorpheApp/morphe-cli/commit/135625917a54eb5e0a9464c40d0ce504619b4845))
28+
29+
# [1.6.0-dev.4](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.3...v1.6.0-dev.4) (2026-03-15)
30+
31+
32+
### Bug Fixes
33+
34+
* Update to latest patcher dev ([fb8a4ff](https://github.com/MorpheApp/morphe-cli/commit/fb8a4ffe70ae24c74c497608b9eb9aa2d76f2a8a))
35+
36+
# [1.6.0-dev.3](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.2...v1.6.0-dev.3) (2026-03-15)
37+
38+
39+
### Bug Fixes
40+
41+
* Update to latest patcher dev ([1551c8e](https://github.com/MorpheApp/morphe-cli/commit/1551c8ef81bd4d267833c1dc543d13c1d1def29f))
42+
43+
# [1.6.0-dev.2](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.1...v1.6.0-dev.2) (2026-03-15)
44+
45+
46+
### Bug Fixes
47+
48+
* Dispatch error when launching app ([#79](https://github.com/MorpheApp/morphe-cli/issues/79)) ([989e72a](https://github.com/MorpheApp/morphe-cli/commit/989e72a04c9ea1b512d556ff8db48b99a4817d98))
49+
50+
# [1.6.0-dev.1](https://github.com/MorpheApp/morphe-cli/compare/v1.5.1-dev.3...v1.6.0-dev.1) (2026-03-14)
51+
52+
53+
### Features
54+
55+
* Add desktop GUI ([#42](https://github.com/MorpheApp/morphe-cli/issues/42)) ([cd627e6](https://github.com/MorpheApp/morphe-cli/commit/cd627e6a4320084403beacd414278b3b75f469da))
56+
57+
## [1.5.1-dev.3](https://github.com/MorpheApp/morphe-cli/compare/v1.5.1-dev.2...v1.5.1-dev.3) (2026-03-13)
58+
59+
60+
### Bug Fixes
61+
62+
* Use more logging verbosity when updating options.json ([#72](https://github.com/MorpheApp/morphe-cli/issues/72)) ([4d223f2](https://github.com/MorpheApp/morphe-cli/commit/4d223f299b690c100ff74ece7e4415f562c6ac96))
63+
64+
## [1.5.1-dev.2](https://github.com/MorpheApp/morphe-cli/compare/v1.5.1-dev.1...v1.5.1-dev.2) (2026-03-13)
65+
66+
67+
### Bug Fixes
68+
69+
* Bump arsclib version, remove APKEditor ([412847e](https://github.com/MorpheApp/morphe-cli/commit/412847e5a0b990321b7443fe774f7420189035d6))
70+
71+
## [1.5.1-dev.1](https://github.com/MorpheApp/morphe-cli/compare/v1.5.0...v1.5.1-dev.1) (2026-03-13)
72+
73+
74+
### Bug Fixes
75+
76+
* Update to Patcher 1.3.0 ([19c0846](https://github.com/MorpheApp/morphe-cli/commit/19c084612310cb590c90b809403450abf6a81560))
77+
178
# [1.5.0](https://github.com/MorpheApp/morphe-cli/compare/v1.4.0...v1.5.0) (2026-03-07)
279

380

build.gradle.kts

Lines changed: 107 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
22

33
plugins {
4-
alias(libs.plugins.kotlin)
4+
alias(libs.plugins.kotlin.jvm)
5+
alias(libs.plugins.kotlin.compose)
56
alias(libs.plugins.kotlin.serialization)
7+
alias(libs.plugins.compose)
68
alias(libs.plugins.shadow)
79
application
810
`maven-publish`
@@ -11,10 +13,33 @@ plugins {
1113

1214
group = "app.morphe"
1315

16+
// ============================================================================
17+
// JVM / Kotlin Configuration
18+
// ============================================================================
19+
kotlin {
20+
jvmToolchain {
21+
languageVersion.set(JavaLanguageVersion.of(17))
22+
vendor.set(JvmVendorSpec.ADOPTIUM)
23+
}
24+
compilerOptions {
25+
jvmTarget.set(JvmTarget.JVM_17)
26+
}
27+
}
28+
29+
// ============================================================================
30+
// Application Entry Point
31+
// ============================================================================
32+
// Shadow JAR reads this for Main-Class manifest attribute.
33+
//
34+
// No args / double-click → GUI (Compose Desktop)
35+
// With args (terminal) → CLI (PicoCLI)
1436
application {
15-
mainClass = "app.morphe.cli.command.MainCommandKt"
37+
mainClass.set("app.morphe.MorpheLauncherKt")
1638
}
1739

40+
// ============================================================================
41+
// Repositories
42+
// ============================================================================
1843
repositories {
1944
mavenLocal()
2045
mavenCentral()
@@ -32,49 +57,71 @@ repositories {
3257
maven { url = uri("https://jitpack.io") }
3358
}
3459

35-
val apkEditorLib by configurations.creating
36-
37-
val strippedApkEditorLib by tasks.registering(org.gradle.jvm.tasks.Jar::class) {
38-
archiveFileName.set("APKEditor-cli.jar")
39-
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
40-
doFirst {
41-
from(apkEditorLib.resolve().map { zipTree(it) })
42-
}
43-
exclude(
44-
"org/xmlpull/**",
45-
"antlr/**",
46-
"org/antlr/**",
47-
"com/beust/jcommander/**",
48-
"javax/annotation/**",
49-
"smali.properties",
50-
"baksmali.properties"
51-
)
52-
}
53-
5460
dependencies {
5561
api(libs.morphe.patcher)
62+
implementation(libs.arsclib)
5663
implementation(libs.morphe.library)
57-
implementation(libs.kotlinx.coroutines.core)
58-
implementation(libs.kotlinx.serialization.json)
5964
implementation(libs.picocli)
60-
apkEditorLib(files("$rootDir/libs/APKEditor-1.4.7.jar"))
61-
implementation(files(strippedApkEditorLib))
6265

66+
// -- Compose Desktop ---------------------------------------------------
67+
// Platform-independent: single JAR runs on all supported OSes.
68+
// Skiko auto-detects the OS at runtime and loads the correct native library.
69+
implementation(compose.desktop.macos_arm64)
70+
implementation(compose.desktop.macos_x64)
71+
implementation(compose.desktop.linux_x64)
72+
implementation(compose.desktop.linux_arm64)
73+
implementation(compose.desktop.windows_x64)
74+
implementation(compose.components.resources)
75+
@Suppress("DEPRECATION")
76+
implementation(compose.material3)
77+
implementation(compose.materialIconsExtended)
78+
79+
// -- Async / Serialization ---------------------------------------------
80+
implementation(libs.kotlinx.coroutines.core)
81+
implementation(libs.kotlinx.coroutines.swing)
82+
implementation(libs.kotlinx.serialization.json)
83+
// testImplementation(libs.kotlin.test)
84+
//}
85+
86+
// -- Networking (GUI) --------------------------------------------------
87+
implementation(libs.ktor.client.core)
88+
implementation(libs.ktor.client.cio)
89+
implementation(libs.ktor.client.content.negotiation)
90+
implementation(libs.ktor.serialization.kotlinx.json)
91+
implementation(libs.ktor.client.logging)
92+
93+
// -- DI / Navigation (GUI) ---------------------------------------------
94+
implementation(platform(libs.koin.bom))
95+
implementation(libs.koin.core)
96+
implementation(libs.koin.compose)
97+
98+
implementation(libs.voyager.navigator)
99+
implementation(libs.voyager.screenmodel)
100+
implementation(libs.voyager.koin)
101+
implementation(libs.voyager.transitions)
102+
103+
// -- APK Parsing (GUI) -------------------------------------------------
104+
implementation(libs.apk.parser)
105+
106+
// -- Testing -----------------------------------------------------------
63107
testImplementation(libs.kotlin.test)
64108
testImplementation(libs.junit.params)
109+
testImplementation(libs.mockk)
65110
}
66111

67-
kotlin {
68-
compilerOptions {
69-
jvmTarget.set(JvmTarget.JVM_11)
112+
// ============================================================================
113+
// Tasks
114+
// ============================================================================
115+
tasks {
116+
jar {
117+
manifest {
118+
attributes(
119+
"Implementation-Title" to project.name,
120+
"Implementation-Version" to project.version
121+
)
122+
}
70123
}
71-
}
72-
73-
java {
74-
targetCompatibility = JavaVersion.VERSION_11
75-
}
76124

77-
tasks {
78125
test {
79126
useJUnitPlatform()
80127
testLogging {
@@ -83,9 +130,15 @@ tasks {
83130
}
84131

85132
processResources {
86-
expand("projectVersion" to project.version)
133+
// Only expand properties files, not binary files like PNG/ICO
134+
filesMatching("**/*.properties") {
135+
expand("projectVersion" to project.version)
136+
}
87137
}
88138

139+
// -------------------------------------------------------------------------
140+
// Shadow JAR — the only distribution artifact
141+
// -------------------------------------------------------------------------
89142
shadowJar {
90143
exclude(
91144
"/prebuilt/linux/aapt",
@@ -95,14 +148,33 @@ tasks {
95148
minimize {
96149
exclude(dependency("org.bouncycastle:.*"))
97150
exclude(dependency("app.morphe:morphe-patcher"))
151+
// Ktor uses ServiceLoader
152+
exclude(dependency("io.ktor:.*"))
153+
// Koin uses reflection
154+
exclude(dependency("io.insert-koin:.*"))
155+
// Coroutines Swing provides Dispatchers.Main via ServiceLoader
156+
exclude(dependency("org.jetbrains.kotlinx:kotlinx-coroutines-swing"))
98157
}
158+
159+
mergeServiceFiles()
160+
}
161+
162+
distTar {
163+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
164+
}
165+
166+
distZip {
167+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
99168
}
100169

101170
publish {
102171
dependsOn(shadowJar)
103172
}
104173
}
105174

175+
// ============================================================================
176+
// Publishing / Signing
177+
// ============================================================================
106178
// Needed by gradle-semantic-release-plugin.
107179
// Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435
108180

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
org.gradle.parallel = true
22
org.gradle.caching = true
33
kotlin.code.style = official
4-
version = 1.5.0
4+
version = 1.6.0-dev.8

0 commit comments

Comments
 (0)