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
7 changes: 7 additions & 0 deletions .github/workflows/update-libs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ jobs:
path: snippets/build/plugin/*.cgp
if-no-files-found: error

- name: Upload ndk-installer CGP
uses: actions/upload-artifact@v4
with:
name: ndk-installer
path: ndk-installer-plugin/build/plugin/*.cgp
if-no-files-found: error

- name: Commit updated jars
run: |
sha=$(git -C .cache/CodeOnTheGo rev-parse --short HEAD)
Expand Down
29 changes: 29 additions & 0 deletions ndk-installer-plugin/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Gradle
.gradle/
build/
gradle-app.setting
!gradle-wrapper.jar
.gradletasknamecache

# IDE
.idea/
*.iml
*.ipr
*.iws
.project
.classpath
.settings/
.kotlin/

# Local configuration
local.properties

# OS
.DS_Store
Thumbs.db

# Logs
*.log

# Test outputs
test-results/
130 changes: 130 additions & 0 deletions ndk-installer-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

import java.net.URL
import java.security.MessageDigest
import java.net.HttpURLConnection


plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.itsaky.androidide.plugins.build")
}

pluginBuilder {
pluginName = "ndk-installer"
}

android {
namespace = "org.appdevforall.ndkinstaller"
compileSdk = 34

defaultConfig {
applicationId = "org.appdevforall.ndkinstaller"
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}

androidResources {
noCompress += listOf("xz")
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

}

kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}

dependencies {
compileOnly(files("../libs/plugin-api.jar"))


implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.21")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}

fun httpDownload(url: String): ByteArray {
val connection = URL(url).openConnection() as HttpURLConnection
connection.instanceFollowRedirects = true
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
connection.connectTimeout = 15000
connection.readTimeout = 30000

val code = connection.responseCode
if (code != 200) {
throw GradleException("Failed to download $url (HTTP $code)")
}

return connection.inputStream.use { it.readBytes() }
}

fun md5Of(file: File): String {
val md = MessageDigest.getInstance("MD5")
file.inputStream().use { input ->
val buffer = ByteArray(8192)
var read: Int
while (input.read(buffer).also { read = it } != -1) {
md.update(buffer, 0, read)
}
}
return md.digest().joinToString("") { "%02x".format(it) }
}

val downloadAssets by tasks.registering {
val assetsDir = project.file("src/main/assets")
val archiveFile = assetsDir.resolve("ndk-cmake.tar.xz")
val md5File = assetsDir.resolve("ndk-cmake.tar.xz.md5")

outputs.files(archiveFile)

doLast {
assetsDir.mkdirs()

val archiveUrl = "https://www.appdevforall.org/dev-assets/release/v8/ndk-cmake.tar.xz"
val md5Url = "https://www.appdevforall.org/dev-assets/release/v8/ndk-cmake.tar.xz.md5"

logger.info("Downloading archive....")
val archiveBytes = httpDownload(archiveUrl)
archiveFile.writeBytes(archiveBytes)

logger.info("Downloading MD5…")
val md5Bytes = httpDownload(md5Url)
md5File.writeBytes(md5Bytes)

val expected = md5File.readText().trim()
val actual = md5Of(archiveFile)

logger.info("Expected MD5: $expected")
logger.info("Actual MD5: $actual")

md5File.delete()

if (!expected.equals(actual, ignoreCase = true)) {
throw GradleException("MD5 checksum mismatch for ndk-cmake.tar.xz")
}

}
}







3 changes: 3 additions & 0 deletions ndk-installer-plugin/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
android.nonTransitiveRClass=true
Binary file not shown.
7 changes: 7 additions & 0 deletions ndk-installer-plugin/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading