Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/bump.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

# Everything here was cribbed from or inspired by
# https://github.com/oflynned/android-version-bump/blob/b9f6de7f8bdf25de3f695843265debf7c3919272.
Expand Down
92 changes: 58 additions & 34 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ jobs:

steps:
# Checks-out your repository under $GITHUB_WORKSPACE for the job.
- uses: actions/checkout@v2
- uses: actions/checkout@v7

- name: Gradle test
run: |
./gradlew -p plugin generateTestTasksJson

- id: setup-matrix
run: echo "::set-output name=matrix::$(cat plugin/build/build-resources/androidTestTasks.json)"
run: echo "matrix=$(cat plugin/build/build-resources/androidTestTasks.json)" >> $GITHUB_OUTPUT

- name: debug
run: echo ${{ steps.setup-matrix.outputs.matrix }}
Expand All @@ -49,20 +49,28 @@ jobs:

steps:
# Checks-out your repository under $GITHUB_WORKSPACE for the job.
- uses: actions/checkout@v2
- uses: actions/checkout@v7

- name: Setup Rust
run: |
rustup toolchain install stable
rustup target add x86_64-linux-android
rustup target add x86_64-unknown-linux-gnu
rustup target add aarch64-linux-android
- name: Setup Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-linux-android,x86_64-unknown-linux-gnu,aarch64-linux-android

- name: Setup Java 11
uses: actions/setup-java@v2
- name: Setup NDK
env:
SDKMANAGER: /cmdline-tools/latest/bin/sdkmanager
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
SDKMANAGER=$(echo $SDKMANAGER | tr '/' '\').bat
fi
${ANDROID_HOME}${SDKMANAGER} --install 'ndk;21.4.7075529' 'ndk;23.1.7779620'
shell: bash

- name: Setup Java 17
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 11
java-version: 17
cache: 'gradle'

- name: Assemble samples/app
Expand Down Expand Up @@ -92,21 +100,29 @@ jobs:

steps:
# Checks-out your repository under $GITHUB_WORKSPACE for the job.
- uses: actions/checkout@v2
- uses: actions/checkout@v7

- name: Setup Rust
- name: Setup Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-linux-android,x86_64-unknown-linux-gnu,aarch64-linux-android

- name: Setup NDK
env:
SDKMANAGER: /cmdline-tools/latest/bin/sdkmanager
run: |
rustup toolchain install stable
rustup target add x86_64-linux-android
rustup target add x86_64-unknown-linux-gnu
rustup target add aarch64-linux-android

# Use Java 8
- name: Setup Java 8
uses: actions/setup-java@v2
if [[ "${{ runner.os }}" == "Windows" ]]; then
SDKMANAGER=$(echo $SDKMANAGER | tr '/' '\').bat
fi
${ANDROID_HOME}${SDKMANAGER} --install 'ndk;21.4.7075529' 'ndk;23.1.7779620'
shell: bash

# Use Java 17
- name: Setup Java 17
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 8
java-version: 17
cache: 'gradle'

- name: Gradle setup
Expand Down Expand Up @@ -140,21 +156,29 @@ jobs:
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- uses: actions/checkout@v7

- name: Setup Rust
- name: Setup NDK
env:
SDKMANAGER: /cmdline-tools/latest/bin/sdkmanager
run: |
rustup toolchain install stable
rustup target add x86_64-linux-android
rustup target add x86_64-unknown-linux-gnu
rustup target add aarch64-linux-android

# Use Java 8
- name: Setup Java 8
uses: actions/setup-java@v2
if [[ "${{ runner.os }}" == "Windows" ]]; then
SDKMANAGER=$(echo $SDKMANAGER | tr '/' '\').bat
fi
${ANDROID_HOME}${SDKMANAGER} --install 'ndk;21.4.7075529' 'ndk;23.1.7779620'
shell: bash

- name: Setup Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-linux-android,x86_64-unknown-linux-gnu,aarch64-linux-android

# Use Java 17
- name: Setup Java 17
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 8
java-version: 17
cache: 'gradle'

- name: Gradle setup
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v7

- name: Set up JDK 8
uses: actions/setup-java@v2
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '8'
java-version: 17
distribution: 'temurin'

- name: Write gradle.properties
Expand Down
25 changes: 2 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,21 +188,6 @@ cargo {
}
```

### prebuiltToolchains

When set to `true` (which requires NDK version 19+), use the prebuilt toolchains bundled with the
NDK. When set to `false`, generate per-target architecture standalone NDK toolchains using
`make_standalone_toolchain.py`. When unset, use the prebuilt toolchains if the NDK version is 19+,
and fall back to generated toolchains for older NDK versions.

Defaults to `null`.

```groovy
cargo {
prebuiltToolchains = true
}
```

### verbose

When set, execute `cargo build` with or without the `--verbose` flag. When unset, respect the
Expand Down Expand Up @@ -370,13 +355,7 @@ cargo {

## Specifying NDK toolchains

The plugin can either use prebuilt NDK toolchain binaries, or search for (and if missing, build)
NDK toolchains as generated by `make_standalone_toolchain.py`.

A prebuilt NDK toolchain will be used if:
1. `rust.prebuiltToolchain=true` in the per-(multi-)project `${rootDir}/local.properties`
1. `prebuiltToolchain=true` in the `cargo { ... }` block (if not overridden by `local.properties`)
1. The discovered NDK is version 19 or higher (if not overridden per above)
The plugin uses prebuilt NDK toolchain binaries.

The toolchains are rooted in a single Android NDK toolchain directory. In order of preference, the
toolchain root directory is determined by:
Expand Down Expand Up @@ -529,7 +508,7 @@ An easy way to locally test changes made in this plugin is to simply add this to
includeBuild('../rust-android-gradle') {
dependencySubstitution {
// As required.
substitute module('gradle.plugin.org.mozilla.rust-android-gradle:plugin') with project(':plugin')
substitute module('gradle.plugin.org.mozilla.rust-android-gradle:plugin') using project(':plugin')
}
}
```
Expand Down
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ buildscript {
Properties versionProperties = new Properties()
versionProperties.load(new FileInputStream("$project.rootDir/version.properties"))

ext.kotlin_version = '1.3.50'
ext.agp_version = '4.0.1'
// Kotlin 1.9.22: Required for Gradle 8.5+ (old Kotlin Gradle plugin uses removed APIs)
ext.kotlin_version = '1.9.22'
// AGP 8.2.0: Required for Gradle 8.5+ compatibility
ext.agp_version = '8.2.0'
ext.plugin_version = versionProperties.getProperty("version")

repositories {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
47 changes: 27 additions & 20 deletions plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ import groovy.json.JsonBuilder
import org.gradle.util.VersionNumber

plugins {
id 'com.gradle.plugin-publish' version '0.14.0'
id "org.gradle.test-retry" version "1.2.0"
// plugin-publish 1.2.1: Required for Gradle 8.5+ (old version uses removed pluginBundle API)
id 'com.gradle.plugin-publish' version '1.2.1'
id "org.gradle.test-retry" version "1.5.8"
}

apply plugin: "java-gradle-plugin"
Expand All @@ -12,12 +13,16 @@ apply plugin: "groovy"
apply plugin: "kotlin"

gradlePlugin {
// website/vcsUrl/tags moved here from pluginBundle (removed in plugin-publish 1.0+)
website = 'https://github.com/mozilla/rust-android-gradle'
vcsUrl = 'https://github.com/mozilla/rust-android-gradle.git'
plugins {
rustAndroidGradlePlugin {
id = 'org.mozilla.rust-android-gradle.rust-android'
implementationClass = 'com.nishtahir.RustAndroidPlugin'
displayName = 'Plugin for building Rust with Cargo in Android projects'
description = 'A plugin that helps build Rust JNI libraries with Cargo for use in Android projects.'
tags.set(['rust', 'cargo', 'android'])
}
}
}
Expand All @@ -28,14 +33,13 @@ version "$plugin_version"
def isCI = (System.getenv('CI') ?: 'false').toBoolean()

// Maps supported Android plugin versions to the versions of Gradle that support it
// Updated for Gradle 8.5+ compatibility (required for Gradle 9 support)
def supportedVersions = [
"7.0.0": ["7.1.1"],
"4.2.2": ["6.8.3", "7.1.1"],
"4.1.3": ["6.5.1", "6.8.3"],
"4.0.2": ["6.1.1", "6.8.3"],
"3.6.4": ["5.6.4", "6.8.3"],
"3.5.4": ["5.4.1", "5.6.4", "6.8.3"],
"3.1.2": ["4.10.2"]
"8.2.0": ["8.5"],
"8.3.0": ["8.5"],
"8.4.0": ["8.6"],
"8.5.0": ["8.7"],
"8.6.0": ["8.7"],
]

// A local repo we publish our library to for testing in order to workaround limitations
Expand All @@ -51,6 +55,8 @@ publishing {

dependencies {
implementation gradleApi()
// Guava: Required for Versions.groovy (was transitively provided by old AGP)
implementation "com.google.guava:guava:32.1.3-jre"
compileOnly "com.android.tools.build:gradle:${agp_version}"

testImplementation gradleTestKit()
Expand All @@ -61,20 +67,19 @@ dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-api"
}

// Java 17: Required for Gradle 8.5+ and AGP 8.x
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

compileKotlin {
kotlinOptions.jvmTarget = "1.8"
kotlinOptions.jvmTarget = "17"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}

pluginBundle {
website = 'https://github.com/mozilla/rust-android-gradle'
vcsUrl = 'https://github.com/mozilla/rust-android-gradle.git'
tags = ['rust', 'cargo', 'android']
kotlinOptions.jvmTarget = "17"
}


// Generate a json file that contains the matrix of Gradle and AGP versions to test against.
def generatedResources = "$buildDir/generated-resources/main"
tasks.register('generateVersions') {
Expand Down Expand Up @@ -152,7 +157,9 @@ static def normalizeVersion(String version) {
}

static def jdkVersionFor(String version) {
def jdkVersion = VersionNumber.parse(version) > VersionNumber.parse("7.0.0-alpha01") ? 11 : 8

// AGP 8.x requires Java 17
def jdkVersion = VersionNumber.parse(version) >= VersionNumber.parse("8.0.0") ? 17 :
VersionNumber.parse(version) > VersionNumber.parse("7.0.0-alpha01") ? 11 : 8

return JavaLanguageVersion.of(jdkVersion)
}
Loading