Skip to content

Commit 8b83d05

Browse files
committed
chore: version updates, code cleanup
1 parent 1a80759 commit 8b83d05

13 files changed

Lines changed: 80 additions & 109 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ plugins {
77
val pluginId = "io.github.MatrixDev.android-rust"
88

99
group = pluginId
10-
version = "0.6.0"
10+
version = "0.5.0"
1111

12-
@Suppress("UnstableApiUsage")
1312
gradlePlugin {
1413
website = "https://github.com/MatrixDev/GradleAndroidRustPlugin"
1514
vcsUrl = "https://github.com/MatrixDev/GradleAndroidRustPlugin.git"

example/app/build.gradle.kts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
2+
13
plugins {
24
alias(libs.plugins.android.application)
5+
alias(libs.plugins.kotlin.android)
36
alias(libs.plugins.android.rust)
47
}
58

69
android {
710
namespace = "dev.matrix.rust"
8-
compileSdk = 33
11+
compileSdk = 36
912
ndkVersion = "25.2.9519653"
1013

1114
defaultConfig {
1215
applicationId = "dev.matrix.rust"
1316
minSdk = 21
14-
targetSdk = 33
17+
targetSdk = 36
1518
versionCode = 1
1619
versionName = "1.0"
1720
}
@@ -26,16 +29,20 @@ android {
2629

2730
sourceSets {
2831
getByName("main") {
29-
java.directories.add("src/rust_library")
32+
java.srcDir("src/rust_library")
3033
}
3134
}
3235

3336
compileOptions {
34-
sourceCompatibility = JavaVersion.VERSION_1_8
35-
targetCompatibility = JavaVersion.VERSION_1_8
37+
sourceCompatibility = JavaVersion.VERSION_17
38+
targetCompatibility = JavaVersion.VERSION_17
3639
}
3740

38-
41+
kotlin {
42+
compilerOptions {
43+
jvmTarget.set(JvmTarget.JVM_17)
44+
}
45+
}
3946
}
4047

4148
androidRust {
@@ -50,10 +57,9 @@ androidRust {
5057
}
5158

5259
dependencies {
53-
implementation("androidx.core:core-ktx:1.9.0")
54-
implementation("androidx.appcompat:appcompat:1.6.1")
55-
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
56-
implementation("androidx.navigation:navigation-fragment-ktx:2.5.3")
57-
implementation("androidx.navigation:navigation-ui-ktx:2.5.3")
58-
implementation("com.google.android.material:material:1.8.0")
60+
implementation(libs.androidx.appcompat)
61+
implementation(libs.androidx.core.ktx)
62+
implementation(libs.androidx.navigation.ui.ktx)
63+
implementation(libs.androidx.navigation.fragment.ktx)
64+
implementation(libs.google.material)
5965
}

example/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
<activity
1616
android:name="dev.matrix.rust.MainActivity"
1717
android:exported="true"
18-
android:label="@string/app_name"
1918
android:theme="@style/Theme.GradlePlugin.NoActionBar">
2019
<intent-filter>
2120
<action android:name="android.intent.action.MAIN" />
@@ -25,4 +24,4 @@
2524
</activity>
2625
</application>
2726

28-
</manifest>
27+
</manifest>

example/app/src/main/res/values/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222
<style name="Theme.GradlePlugin.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
2323

2424
<style name="Theme.GradlePlugin.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
25-
</resources>
25+
</resources>

example/gradle/libs.versions.toml

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
11
[versions]
2-
agp = "9.0.1"
3-
kotlin = "2.2.10"
4-
coreKtx = "1.15.0"
5-
junit = "4.13.2"
6-
junitVersion = "1.1.5"
7-
espressoCore = "3.5.1"
8-
lifecycleRuntimeKtx = "2.8.7"
9-
activityCompose = "1.9.3"
10-
composeBom = "2024.04.01"
2+
agp = "8.13.2"
3+
kotlin = "2.3.10"
4+
coreKtx = "1.17.0"
5+
navigationKtx = "2.9.7"
116

127
[libraries]
13-
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
14-
junit = { group = "junit", name = "junit", version.ref = "junit" }
15-
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
16-
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
17-
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
18-
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
19-
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
20-
androidx-ui = { group = "androidx.compose.ui", name = "ui" }
21-
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
22-
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
23-
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
24-
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
25-
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
26-
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }
8+
androidx-appcompat = "androidx.appcompat:appcompat:1.7.1"
9+
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" }
10+
androidx-navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigationKtx" }
11+
androidx-navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "navigationKtx" }
12+
google-material = "com.google.android.material:material:1.13.0"
2713

2814
[plugins]
2915
android-application = { id = "com.android.application", version.ref = "agp" }
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#Mon Feb 16 23:06:32 CST 2026
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
4-
distributionSha256Sum=72f44c9f8ebcb1af43838f45ee5c4aa9c5444898b3468ab3f4af7b6076c5bc3f
5-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
4+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
65
zipStoreBase=GRADLE_USER_HOME
76
zipStorePath=wrapper/dists

example/settings.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ pluginManagement {
1111
gradlePluginPortal()
1212
}
1313
}
14-
plugins {
15-
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
16-
}
1714

1815
dependencyResolutionManagement {
1916
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

gradle.properties

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +0,0 @@
1-
android.builtInKotlin=false
2-
android.defaults.buildfeatures.resvalues=true
3-
android.dependency.useConstraints=true
4-
android.enableAppCompileTimeRClass=false
5-
android.newDsl=false
6-
android.r8.optimizedResourceShrinking=false
7-
android.r8.strictFullModeForKeepRules=false
8-
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
9-
android.uniquePackageNames=false
10-
android.useAndroidX=false
11-
android.usesSdkInManifest.disallowed=false

src/main/kotlin/dev/matrix/agp/rust/AndroidRustPlugin.kt

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package dev.matrix.agp.rust
22

3-
import com.android.build.api.dsl.CommonExtension
43
import com.android.build.gradle.internal.tasks.factory.dependsOn
54
import dev.matrix.agp.rust.utils.Abi
65
import dev.matrix.agp.rust.utils.RustBinaries
76
import dev.matrix.agp.rust.utils.SemanticVersion
87
import dev.matrix.agp.rust.utils.getAndroidComponentsExtension
9-
import dev.matrix.agp.rust.utils.getAndroidExtension
108
import org.gradle.api.Plugin
119
import org.gradle.api.Project
1210
import org.gradle.api.tasks.TaskProvider
1311
import org.gradle.process.ExecOperations
14-
import java.io.File
1512
import javax.inject.Inject
1613

1714
//
@@ -24,35 +21,33 @@ abstract class AndroidRustPlugin @Inject constructor(
2421
) : Plugin<Project> {
2522
override fun apply(project: Project) {
2623
val rustBinaries = RustBinaries(project)
27-
val extension = project.extensions.create("androidRust", AndroidRustExtension::class.java)
24+
val rustExtension = project.extensions.create("androidRust", AndroidRustExtension::class.java)
2825
val androidComponents = project.getAndroidComponentsExtension()
2926
val tasksByBuildType = HashMap<String, ArrayList<TaskProvider<RustBuildTask>>>()
3027

31-
androidComponents.finalizeDsl {
32-
val androidExtension = project.getAndroidExtension()
28+
androidComponents.finalizeDsl { androidExtension ->
3329
val allRustAbiSet = mutableSetOf<Abi>()
34-
// Use sdkComponents to get NDK directory (Provider<Directory>)
35-
val ndkDirectory = androidComponents.sdkComponents.ndkDirectory.map { it.asFile }
30+
val ndkDirectory = androidComponents.sdkComponents.ndkDirectory
3631
val ndkVersion = SemanticVersion(androidExtension.ndkVersion)
37-
val extensionBuildDirectory = project.layout.buildDirectory.dir("intermediates/rust").get().asFile
32+
val extensionBuildDirectory = project.layout.buildDirectory.dir("intermediates/rust").get()
3833

3934
for (buildType in androidExtension.buildTypes) {
4035
val buildTypeNameCap = buildType.name.replaceFirstChar(Char::titlecase)
4136

42-
val variantBuildDirectory = File(extensionBuildDirectory, buildType.name)
43-
val variantJniLibsDirectory = File(variantBuildDirectory, "jniLibs")
37+
val variantBuildDirectory = extensionBuildDirectory.dir(buildType.name)
38+
val variantJniLibsDirectory = variantBuildDirectory.dir("jniLibs")
4439

4540
val cleanTaskName = "clean${buildTypeNameCap}RustJniLibs"
4641
val cleanTask = project.tasks.register(cleanTaskName, RustCleanTask::class.java) {
4742
this.variantJniLibsDirectory.set(variantJniLibsDirectory)
4843
}
4944

50-
for ((moduleName, module) in extension.modules) {
45+
for ((moduleName, module) in rustExtension.modules) {
5146
val moduleNameCap = moduleName.replaceFirstChar(Char::titlecase)
52-
val moduleBuildDirectory = File(variantBuildDirectory, "lib_$moduleName")
47+
val moduleBuildDirectory = variantBuildDirectory.dir("lib_$moduleName")
5348

5449
val rustBuildType = module.buildTypes[buildType.name]
55-
val rustConfiguration = mergeRustConfigurations(rustBuildType, module, extension)
50+
val rustConfiguration = mergeRustConfigurations(rustBuildType, module, rustExtension)
5651

5752
val testTask = when (rustConfiguration.runTests) {
5853
true -> {
@@ -88,10 +83,12 @@ abstract class AndroidRustPlugin @Inject constructor(
8883
}
8984
}
9085

91-
androidExtension.sourceSets.findByName(buildType.name)?.jniLibs?.directories?.add(variantJniLibsDirectory.absolutePath)
86+
androidExtension.sourceSets.findByName(buildType.name)?.also {
87+
it.jniLibs.directories.add(variantJniLibsDirectory.asFile.absolutePath)
88+
}
9289
}
9390

94-
val minimumSupportedRustVersion = SemanticVersion(extension.minimumSupportedRustVersion)
91+
val minimumSupportedRustVersion = SemanticVersion(rustExtension.minimumSupportedRustVersion)
9592
installRustComponentsIfNeeded(
9693
execOperations,
9794
minimumSupportedRustVersion,
@@ -143,7 +140,7 @@ abstract class AndroidRustPlugin @Inject constructor(
143140
private fun mergeRustConfigurations(vararg configurations: AndroidRustConfiguration?): AndroidRustConfiguration {
144141
val defaultConfiguration = AndroidRustConfiguration().also {
145142
it.profile = "release"
146-
it.targets = Abi.values().mapTo(ArrayList(), Abi::rustName)
143+
it.targets = Abi.entries.mapTo(ArrayList(), Abi::rustName)
147144
it.runTests = null
148145
it.disableAbiOptimization = null
149146
}

src/main/kotlin/dev/matrix/agp/rust/RustBuildTask.kt

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ import dev.matrix.agp.rust.utils.Os
55
import dev.matrix.agp.rust.utils.RustBinaries
66
import dev.matrix.agp.rust.utils.SemanticVersion
77
import org.gradle.api.DefaultTask
8+
import org.gradle.api.file.DirectoryProperty
89
import org.gradle.api.provider.Property
910
import org.gradle.api.tasks.Input
11+
import org.gradle.api.tasks.InputDirectory
12+
import org.gradle.api.tasks.OutputDirectory
1013
import org.gradle.api.tasks.TaskAction
1114
import org.gradle.process.ExecOperations
1215
import java.io.File
@@ -28,20 +31,20 @@ internal abstract class RustBuildTask : DefaultTask() {
2831
@get:Input
2932
abstract val ndkVersion: Property<SemanticVersion>
3033

31-
@get:Input
32-
abstract val ndkDirectory: Property<File>
34+
@get:InputDirectory
35+
abstract val ndkDirectory: DirectoryProperty
3336

3437
@get:Input
3538
abstract val rustProfile: Property<String>
3639

3740
@get:Input
3841
abstract val rustProjectDirectory: Property<File>
3942

40-
@get:Input
41-
abstract val cargoTargetDirectory: Property<File>
43+
@get:OutputDirectory
44+
abstract val cargoTargetDirectory: DirectoryProperty
4245

43-
@get:Input
44-
abstract val variantJniLibsDirectory: Property<File>
46+
@get:OutputDirectory
47+
abstract val variantJniLibsDirectory: DirectoryProperty
4548

4649
@TaskAction
4750
fun taskAction() {
@@ -62,10 +65,10 @@ internal abstract class RustBuildTask : DefaultTask() {
6265
Os.Unknown -> throw Exception("OS is not supported")
6366
}
6467

65-
val toolchainFolder = File(ndkDirectory, "toolchains/llvm/prebuilt/$platform/bin")
66-
val cc = File(toolchainFolder, abi.cc(apiLevel))
67-
val cxx = File(toolchainFolder, abi.ccx(apiLevel))
68-
val ar = File(toolchainFolder, abi.ar(ndkVersion.major))
68+
val toolchainFolder = ndkDirectory.dir("toolchains/llvm/prebuilt/$platform/bin")
69+
val cc = toolchainFolder.dir(abi.cc(apiLevel))
70+
val cxx = toolchainFolder.dir(abi.ccx(apiLevel))
71+
val ar = toolchainFolder.dir(abi.ar(ndkVersion.major))
6972

7073
val cargoTargetTriplet = abi.rustTargetTriple
7174
.replace('-', '_')
@@ -79,7 +82,7 @@ internal abstract class RustBuildTask : DefaultTask() {
7982
environment("CC_${abi.rustTargetTriple}", cc)
8083
environment("CXX_${abi.rustTargetTriple}", cxx)
8184
environment("AR_${abi.rustTargetTriple}", ar)
82-
environment("CARGO_TARGET_DIR", cargoTargetDirectory.absolutePath)
85+
environment("CARGO_TARGET_DIR", cargoTargetDirectory)
8386
environment("CARGO_TARGET_${cargoTargetTriplet}_LINKER", cc)
8487

8588
commandLine(rustBinaries.cargo)
@@ -99,8 +102,8 @@ internal abstract class RustBuildTask : DefaultTask() {
99102
else -> rustProfile
100103
}
101104
include("*.so")
102-
from(File(cargoTargetDirectory, "${abi.rustTargetTriple}/${dir}/"))
103-
into(File(variantJniLibsDirectory, abi.androidName))
105+
from(cargoTargetDirectory.dir("${abi.rustTargetTriple}/${dir}/"))
106+
into(variantJniLibsDirectory.dir(abi.androidName))
104107
}
105108
}
106109
}

0 commit comments

Comments
 (0)