java-libkiwix/lib/build.gradle
Matthieu Gautier f7f6d5628d Adapt build system
- Build everything in buildDir instead of copy/generate things in src.
2022-12-21 16:01:02 +01:00

290 lines
10 KiB
Groovy

import java.util.stream.Collectors
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
id "de.undercouch.download"
}
Properties properties = new Properties()
if (rootProject.file("local.properties").exists()) {
properties.load(rootProject.file("local.properties").newDataInputStream())
}
ext["keyId"] = properties.getProperty("signing.keyId", System.getenv('SIGNING_KEY_ID'))
ext["password"] = properties.getProperty("signing.password", System.getenv('SIGNING_PASSWORD'))
ext["key"] = properties.getProperty("signing.key", System.getenv('SIGNING_KEY'))
ext["ossrhUsername"] = properties.getProperty("ossrhUsername", System.getenv('OSSRH_USERNAME'))
ext["ossrhPassword"] = properties.getProperty("ossrhPassword", System.getenv('OSSRH_PASSWORD'))
ext["sonatypeStagingProfileId"] = properties.getProperty("sonatypeStagingProfileId", System.getenv('SONATYPE_STAGING_PROFILE_ID'))
ext {
set("GROUP_ID", "org.kiwix.kiwixlib")
set("ARTIFACT_ID", "kiwixlib")
set("VERSION", "11.0.0")
}
apply from: 'publish.gradle'
android {
compileSdk 32
defaultConfig {
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ''
arguments "-DANDROID_STL=c++_shared", "-DBUILD_DIR=${buildDir}"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
externalNativeBuild {
cmake {
path file('src/cpp/CMakeLists.txt')
version '3.18.1'
}
}
buildFeatures {
viewBinding true
}
ndkVersion '21.4.7075529'
}
dependencies {
implementation 'com.getkeepsafe.relinker:relinker:1.4.5'
implementation 'androidx.core:core-ktx:1.7.0'
}
ext.libkiwix_base_url = 'https://download.kiwix.org/nightly'
ext.libzim_base_url = 'https://download.openzim.org/nightly'
// change this date to get latest libzim .so and header files
ext.nightly_date_for_libkiwix = project.properties["nightly_date_for_libkiwix"] ?: ""
ext.nightly_date_for_libzim = project.properties["nightly_date_for_libzim"] ?: ""
ext.libkiwix_version = project.properties["libkiwix_version"] ?: ""
ext.libzim_version = project.properties["libzim_version"] ?: ""
task downloadLibzimSoAndHeaderFiles(type: Download) {
src([
libzim_base_url + '/libzim_android-arm.tar.gz',
libzim_base_url + '/libzim_android-arm64.tar.gz',
libzim_base_url + '/libzim_android-x86.tar.gz',
libzim_base_url + '/libzim_android-x86_64.tar.gz',
libzim_base_url + '/libzim_linux-x86_64.tar.gz'
])
dest buildDir
overwrite true
}
task checkCurrentLibzimDate() {
project.ext.set("nightly_date_for_libzim", getDateFromPath(buildDir.path, "libzim_android-arm64-"))
}
task unzipLibzim(type: Copy) {
// unzip android arm
from tarTree(buildDir.path + "/libzim_android-arm.tar.gz")
into buildDir
// unzip android arm64
from tarTree(buildDir.path + "/libzim_android-arm64.tar.gz")
into buildDir
// unzip android x86
from tarTree(buildDir.path + "/libzim_android-x86.tar.gz")
into buildDir
// unzip android x86_64
from tarTree(buildDir.path + "/libzim_android-x86_64.tar.gz")
into buildDir
// unzip linux x86_64
from tarTree(buildDir.path + "/libzim_linux-x86_64.tar.gz")
into buildDir
}
task copyLibzimHeaderFiles(type: Copy) {
// copying header file
from buildDir.path + "/libzim_android-arm-" + nightly_date_for_libzim + '/include/'
into buildDir.path + "/include/libzim/"
}
task copyLibzimAndroidArm(type: Copy) {
// copying android_arm so file
from buildDir.path + "/libzim_android-arm-" + nightly_date_for_libzim + '/lib/arm-linux-androideabi/'
into buildDir.path + "/jniLibs/armeabi-v7a/libzim/"
}
task copyLibzimAndroidArm64(type: Copy) {
// copying android_arm64 so file
from buildDir.path + "/libzim_android-arm64-" + nightly_date_for_libzim + '/lib/aarch64-linux-android/'
into buildDir.path + "/jniLibs/arm64-v8a/libzim/"
}
task copyLibzimAndroidx86(type: Copy) {
// copying android_x86 so file
from buildDir.path + "/libzim_android-x86-" + nightly_date_for_libzim + '/lib/i686-linux-android/'
into buildDir.path + "/jniLibs/x86/libzim/"
}
task copyLibzimAndroidx86_64(type: Copy) {
// copying android_x86_64 so file
from buildDir.path + "/libzim_android-x86_64-" + nightly_date_for_libzim + '/lib/x86_64-linux-android/'
into buildDir.path + "/jniLibs/x86_64/libzim/"
}
task copyLibzimLinux_x86_64(type: Copy) {
// copying linux_x86_64 so file
project.ext.set("libzim_version", getFileFromFolder(buildDir.path + "/libzim_linux-x86_64-" + nightly_date_for_libzim + "/lib/x86_64-linux-gnu/"))
from buildDir.path + "/libzim_linux-x86_64-" + nightly_date_for_libzim + "/lib/x86_64-linux-gnu/" + libzim_version
into buildDir.path
}
task renameLibzimSoFile(type: Copy) {
if (libzim_version != null) {
from(buildDir.path)
include libzim_version
destinationDir file(buildDir.path)
rename libzim_version, "libzim.so"
}
}
task downloadLibkiwixSoAndHeaderFiles(type: Download) {
src([
libkiwix_base_url + '/libkiwix_android-arm.tar.gz',
libkiwix_base_url + '/libkiwix_android-arm64.tar.gz',
libkiwix_base_url + '/libkiwix_android-x86.tar.gz',
libkiwix_base_url + '/libkiwix_android-x86_64.tar.gz',
libkiwix_base_url + '/libkiwix_linux-x86_64.tar.gz'
])
dest buildDir
overwrite true
}
task checkCurrentLibkiwixDate() {
project.ext.set("nightly_date_for_libkiwix", getDateFromPath(buildDir.path, "libkiwix_android-arm64-"))
}
static String getDateFromPath(String path, String matchesString) {
File folder = new File(path)
if (folder.exists()) {
return folder.listFiles()
.stream()
.filter(f -> f.name.startsWith(matchesString))
.map(s -> s.name.replace(matchesString, ""))
.collect(Collectors.toList())[0]
}
}
task unzipLibkiwix(type: Copy) {
// unzip android arm
from tarTree(buildDir.path + "/libkiwix_android-arm.tar.gz")
into buildDir
// unzip android arm64
from tarTree(buildDir.path + "/libkiwix_android-arm64.tar.gz")
into buildDir
// unzip android x86
from tarTree(buildDir.path + "/libkiwix_android-x86.tar.gz")
into buildDir
// unzip android x86_64
from tarTree(buildDir.path + "/libkiwix_android-x86_64.tar.gz")
into buildDir
// unzip linux x86_64
from tarTree(buildDir.path + "/libkiwix_linux-x86_64.tar.gz")
into buildDir
}
task copyLibkiwixHeaderFiles(type: Copy) {
// copying header file
from buildDir.path + "/libkiwix_android-arm-" + nightly_date_for_libkiwix + '/include/kiwix/'
into buildDir.path + "/include/libkiwix/"
}
task copyLibkiwixAndroidArm(type: Copy) {
// copying android_arm so file
from buildDir.path + "/libkiwix_android-arm-" + nightly_date_for_libkiwix + '/lib/arm-linux-androideabi/'
into buildDir.path + "/jniLibs/armeabi-v7a/libkiwix/"
}
task copyLibkiwixAndroidArm64(type: Copy) {
// copying android_arm64 so file
from buildDir.path + "/libkiwix_android-arm64-" + nightly_date_for_libkiwix + '/lib/aarch64-linux-android/'
into buildDir.path + "/jniLibs/arm64-v8a/libkiwix/"
}
task copyLibkiwixAndroidx86(type: Copy) {
// copying android_x86 so file
from buildDir.path + "/libkiwix_android-x86-" + nightly_date_for_libkiwix + '/lib/i686-linux-android/'
into buildDir.path + "/jniLibs/x86/libkiwix/"
}
task copyLibkiwixAndroidx86_64(type: Copy) {
// copying android_x86_64 so file
from buildDir.path + "/libkiwix_android-x86_64-" + nightly_date_for_libkiwix + '/lib/x86_64-linux-android/'
into buildDir.path + "/jniLibs/x86_64/libkiwix/"
}
task copyLibkiwixLinux_x86_64(type: Copy) {
// copying linux_x86_64 so file
project.ext.set("libkiwix_version", getFileFromFolder(buildDir.path + "/libkiwix_linux-x86_64-" + nightly_date_for_libkiwix + "/lib/x86_64-linux-gnu/"))
from buildDir.path + "/libkiwix_linux-x86_64-" + nightly_date_for_libkiwix + "/lib/x86_64-linux-gnu/" + libkiwix_version
into buildDir.path
}
static String getFileFromFolder(String path) {
File folderFile = new File(path)
if (folderFile.exists()) {
return folderFile.listFiles()
.stream()
.filter(f -> f.length() > 0)
.collect(Collectors.toList())[0].name
}
}
task renameLibkiwixSoFile(type: Copy) {
if (libkiwix_version != null) {
from(buildDir.path)
include libkiwix_version
destinationDir file(buildDir.path)
rename libkiwix_version, "libkiwix.so"
}
}
task copyBuildKiwixSoFile(type: Copy) {
// copying linux_x86_64 so file
from projectDir.path + "/src/androidTests/java/org/kiwix/kiwixlib/libbuildkiwix.so"
into buildDir.path
}
task createCodeCoverageReport(type: Exec) {
workingDir "${projectDir}/src/androidTests/java/org/kiwix/kiwixlib/"
commandLine 'sh', '-c', "bash 'compile_and_run_test.sh' ${buildDir}/libs/*app*.jar $buildDir"
}
task checkCurrentJavaVersion() {
if (JavaVersion.current() != JavaVersion.VERSION_11) {
throw new RuntimeException("This build must be run with java 11. your current java version is ${JavaVersion.current()}")
}
}
task generateHeaderFilesFromJavaWrapper(type: Exec) {
workingDir "${projectDir}/src/main/java/org/kiwix/"
commandLine 'bash', '-c', "javac -h ${buildDir}/include/javah_generated/ -d ${buildDir}/kiwixlib/ kiwixlib/Book.java kiwixlib/DirectAccessInfo.java kiwixlib/Filter.java kiwixlib/JNIICU.java kiwixlib/JNIKiwixBool.java kiwixlib/JNIKiwixException.java kiwixlib/JNIKiwixInt.java kiwixlib/JNIKiwixReader.java kiwixlib/JNIKiwixSearcher.java kiwixlib/JNIKiwixServer.java kiwixlib/JNIKiwixString.java kiwixlib/Library.java kiwixlib/Manager.java"
}