apply plugin: 'com.android.library'
def BADoclet_Path = '/home/olivier/Documents/01-projets/01-Java/BADoclet'
def B4A_AdditionalLibs = '/home/olivier/Documents/01-projets/02-Android/B4A_OtherLibs'
def Optional_B4AStaticClass = 'none'
def Optional_B44IgnoreClasses = 'none'
def buildTempLibs = "$buildDir" + File.separator + "tmp" + File.separator + "libs"
def buildClasses = "$buildDir" + File.separator + "classes"
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
buildFeatures {
buildConfig = false
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main {
java {filter.excludes = ["dummy/*.java"]}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
compileOnly files('../libs/b4a/Core.jar')
compileOnly files('../libs/b4a/B4AShared.jar')
// Implementation sample :
implementation 'com.github.rey5137:material:1.3.1'
implementation 'androidx.annotation:annotation:1.2.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
}
configurations {
println("Check directories")
File BADocletPath = new File (BADoclet_Path)
if (!BADocletPath.exists()){
throw new FileNotFoundException('BADoclet path not found! Please, check BADoclet_Path.')
}
File B4xPath = new File (B4A_AdditionalLibs)
if (!B4xPath.exists()){
throw new FileNotFoundException('B4X Additional Libraries path not found! Please, check B4A_AdditionalLibs.')
}
/* update Jan 26, 2024 : deleted because it causes an error
println("Copy api (jar file) into libs directory")
configurations.api.canBeResolved(true)
copy {
from configurations.api
into 'libs'
}
*/
println("Prepare environment for Javadoc")
configurations.implementation.canBeResolved(true)
configurations.implementation
.each { archive ->
if (archive.name.endsWith('.aar')) {
copy {
from zipTree(archive)
include "**" + File.separator + "classes.jar"
into buildTempLibs + File.separator + "${archive.name.replace('.aar', '')}"
}
}
else {
copy {
from archive
into buildTempLibs
}
}
}
configurations.compileOnly.canBeResolved(true)
configurations.compileOnly
.each { archive ->
if (archive.name.endsWith('.aar')) {
copy {
from zipTree(archive)
include "**" + File.separator + "classes.jar"
into buildTempLibs + File.separator + "${archive.name.replace('.aar', '')}"
}
}
else {
copy {
from archive
into buildTempLibs
}
}
}
}
tasks.register("b4xJavadoc", Javadoc) {
File javadocFile = new File(B4A_AdditionalLibs + File.separator + thisObject.getName() + ".xml")
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
classpath += fileTree(dir: buildTempLibs)
source = "src" + File.separator + "main" + File.separator + "java"
options.docletpath = [file(BADoclet_Path)]
options.doclet = "BADoclet"
options.addStringOption("b4atarget", javadocFile.absoluteFile.toString())
options.addStringOption("b4aignore", Optional_B44IgnoreClasses)
}
tasks.whenTaskAdded {
theTask ->
if (theTask.name.contains("assembleRelease")) {
theTask.dependsOn(b4xJavadoc)
doLast{
println("CreateDummyJar")
ant.mkdir(dir: buildClasses)
ant.javac(
release: "8",
srcdir: "src" + File.separator + "main" + File.separator + "java" + File.separator + "dummy",
destdir: buildClasses,
debug: "false",
includeantruntime: "false",
classpath: ".." + File.separator + "libs" + File.separator + "b4a" + File.separator + "B4AShared.jar"
)
ant.jar(
basedir: buildClasses,
jarfile: B4A_AdditionalLibs + File.separator + thisObject.getName() + '.jar'
)
println("Copy aar files to B4X Additional Libraries")
copy {
from "$buildDir" + File.separator + "outputs" + File.separator + "aar" + File.separator + thisObject.getName() + "-release.aar"
into B4A_AdditionalLibs
rename(thisObject.getName() + '-release.aar', thisObject.getName() + '.aar')
}
println("Update Javadoc")
ant.replaceregexp(
file: B4A_AdditionalLibs + File.separator + thisObject.getName() + '.xml',
match: '\\<class\\>(\\n *\\<name\\>' + Optional_B4AStaticClass + '\\<\\/name\\>)',
replace: '\\<class b4a_type=\'StaticCode\'\\>\\1',
flags: 'g',
byline: 'false'
)
}
}
}