a344f15287
maven central so far doesn't support ipv6 on the primary URL (see https://issues.sonatype.org/browse/MVNCENTRAL-658 ), it is only enabled on a dedicated ipv6.repo1.maven.org URL currently. Add that one to the list of repositories so that ipv6-only hosts can also fetch the dependencies. (when using internal ipv4 as well, you'll also need to export JAVA_OPTS="-Djava.net.preferIPv6Addresses=true" since otherwise the gradle wrapper fails to download gradle) Change-Id: I22f0e07fd4e6bb518396f76db20c174e45588372 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147917 Tested-by: Jenkins Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
309 lines
10 KiB
Groovy
309 lines
10 KiB
Groovy
apply plugin: 'com.android.application'
|
|
// buildhost settings - paths and the like
|
|
apply from: 'liboSettings.gradle'
|
|
|
|
allprojects {
|
|
repositories {
|
|
mavenCentral()
|
|
maven {
|
|
url "https://ipv6.repo1.maven.org/maven2"
|
|
}
|
|
google()
|
|
}
|
|
}
|
|
//build-time dependencies - android plugin for gradle
|
|
buildscript {
|
|
repositories {
|
|
mavenCentral()
|
|
maven {
|
|
url "https://ipv6.repo1.maven.org/maven2"
|
|
}
|
|
google()
|
|
}
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:7.4.1'
|
|
}
|
|
}
|
|
|
|
// compile-time dependencies
|
|
dependencies {
|
|
implementation fileTree(dir: "${liboInstdir}/${liboUREJavaFolder}", include: [
|
|
"java_uno.jar",
|
|
"libreoffice.jar",
|
|
"unoloader.jar"
|
|
])
|
|
implementation 'com.google.android.material:material:1.8.0'
|
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
|
implementation "androidx.multidex:multidex:2.0.1"
|
|
}
|
|
|
|
android {
|
|
namespace 'org.libreoffice'
|
|
compileSdkVersion 33
|
|
// uses non-conventional source layout, so need to reconfigure accordingly
|
|
// ToDo move to conventional layout, so stuff can be stripped down.
|
|
sourceSets {
|
|
main.manifest.srcFile 'AndroidManifest.xml'
|
|
main.assets.srcDirs = ['assets']
|
|
main.res.srcDirs = ['res', 'res_generated']
|
|
main.java.srcDirs = ['../Bootstrap/src', 'src/java']
|
|
main.jniLibs.srcDirs = ["${liboJniLibsdir}"]
|
|
// the configuration data that might be stripped or not
|
|
fullUI.assets.srcDirs 'assets_fullUI'
|
|
strippedUI.assets.srcDirs 'assets_strippedUI'
|
|
strippedUIEditing.assets.srcDirs 'assets_strippedUI'
|
|
}
|
|
defaultConfig {
|
|
// minSdkVersion is set in liboSettings.gradle
|
|
targetSdkVersion 33
|
|
// multidex needed when > 65,536 methods referenced with minSdKVersion < 21
|
|
// s. https://developer.android.com/studio/build/multidex
|
|
multiDexEnabled true
|
|
vectorDrawables.useSupportLibrary = true
|
|
}
|
|
buildTypes {
|
|
debug {
|
|
// make android studio happy...
|
|
jniDebuggable true
|
|
// would work just fine with external, but setting emulator up is a little more work
|
|
manifestPlaceholders = [installLocation: "auto"]
|
|
}
|
|
release {
|
|
manifestPlaceholders = [installLocation: "preferExternal"]
|
|
}
|
|
}
|
|
|
|
flavorDimensions "default"
|
|
productFlavors {
|
|
strippedUI {
|
|
dimension "default"
|
|
buildConfigField 'boolean', 'ALLOW_EDITING', 'false'
|
|
}
|
|
strippedUIEditing {
|
|
dimension "default"
|
|
buildConfigField 'boolean', 'ALLOW_EDITING', 'true'
|
|
versionNameSuffix "-editing"
|
|
}
|
|
fullUI.dimension "default"
|
|
}
|
|
lint {
|
|
// don't error-out on missing translations
|
|
warning 'MissingTranslation'
|
|
}
|
|
}
|
|
|
|
/* remark inherited from makefile:
|
|
Then "assets". Let the directory structure under assets mimic
|
|
that under solver for now.
|
|
|
|
Please note that I have no idea what all of this is really necessary and for
|
|
much of this stuff being copied, no idea whether it makes any sense at all.
|
|
Much of this is copy-pasted from android/qa/sc/Makefile (where a couple of
|
|
unit tests for sc are built, and those do seem to mostly work) and
|
|
android/qa/desktop/Makefile (mmeeks's desktop demo, also works to some
|
|
extent)
|
|
*/
|
|
|
|
// Assets that are unpacked at run-time into the app's data directory. These
|
|
// are files read by non-LO code, fontconfig and freetype for now, that doesn't
|
|
// understand "/assets" paths.
|
|
task copyUnpackAssets(type: Copy) {
|
|
description "copies assets that need to be extracted on the device"
|
|
into 'assets/unpack'
|
|
into('program') {
|
|
from("${liboInstdir}/${liboEtcFolder}/types") {
|
|
includes = [
|
|
"offapi.rdb",
|
|
"oovbaapi.rdb"
|
|
]
|
|
}
|
|
from("${liboInstdir}/${liboUreMiscFolder}") {
|
|
includes = ["types.rdb"]
|
|
rename 'types.rdb', 'udkapi.rdb'
|
|
}
|
|
}
|
|
into('user/fonts') {
|
|
from "${liboInstdir}/share/fonts/truetype"
|
|
// Note: restrict list of fonts due to size considerations - no technical reason anymore
|
|
// ToDo: fonts would be good candidate for using Expansion Files instead
|
|
includes = [
|
|
"Liberation*.ttf",
|
|
"Caladea-*.ttf",
|
|
"Carlito-*.ttf",
|
|
"Gen*.ttf",
|
|
"opens___.ttf"
|
|
]
|
|
}
|
|
into('etc/fonts') {
|
|
from "./"
|
|
includes = ['fonts.conf']
|
|
filter {
|
|
String line ->
|
|
line.replaceAll(
|
|
'@@APPLICATION_ID@@', new String("${android.defaultConfig.applicationId}")
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
task copyAssets(type: Copy) {
|
|
description "copies assets that can be accessed within the installed apk"
|
|
into 'assets'
|
|
|
|
// include icons, Impress styles and required .ui files
|
|
into ('share') {
|
|
into ('config') {
|
|
from ("${liboInstdir}/share/config")
|
|
includes = ['images_**.zip',
|
|
'**/simpress/**.xml',
|
|
'**/annotation.ui',
|
|
'**/hfmenubutton.ui',
|
|
'**/inforeadonlydialog.ui',
|
|
'**/pbmenubutton.ui',
|
|
'**/scrollbars.ui',
|
|
'**/tabbuttons.ui',
|
|
'**/tabviewbar.ui'
|
|
]
|
|
}
|
|
}
|
|
|
|
into('program') {
|
|
from "${liboInstdir}/program"
|
|
includes = ['services.rdb', 'services/services.rdb']
|
|
|
|
into('resource') {
|
|
from "${liboInstdir}/${liboSharedResFolder}"
|
|
includes = ['*en-US.res']
|
|
}
|
|
}
|
|
into('share') {
|
|
from("${liboInstdir}/share") {
|
|
// Filter data is needed by e.g. the drawingML preset shape import.
|
|
includes = ['registry/**', 'filter/**']
|
|
// those two get processed by mobile-config.py
|
|
excludes = ['registry/main.xcd', 'registry/res/registry_en-US.xcd']
|
|
}
|
|
// separate data files for Chinese and Japanese
|
|
from("${liboWorkdir}/CustomTarget/i18npool/breakiterator/") {
|
|
include '*.data'
|
|
}
|
|
}
|
|
}
|
|
|
|
task copyAppResources(type: Copy) {
|
|
description "copies documents to make them available as app resources"
|
|
into 'res_generated/raw'
|
|
from("${liboInstdir}") {
|
|
includes = ["LICENSE", "NOTICE"]
|
|
rename "LICENSE", "license.txt"
|
|
rename "NOTICE", "notice.txt"
|
|
}
|
|
from("${liboExampleDocument}") {
|
|
rename ".*", "example.odt"
|
|
}
|
|
}
|
|
|
|
task createFullConfig(type: Copy) {
|
|
// grab dir to clear whole hierarchy on clean target
|
|
outputs.dir "assets_fullUI"
|
|
into 'assets_fullUI/share/config/soffice.cfg'
|
|
from "${liboInstdir}/share/config/soffice.cfg"
|
|
}
|
|
|
|
task createStrippedConfig {
|
|
def preserveDir = file("assets_strippedUI/share/config/soffice.cfg/empty")
|
|
outputs.dir "assets_strippedUI"
|
|
outputs.dir "assets_strippedUI/share/registry/res"
|
|
outputs.file preserveDir
|
|
|
|
doLast {
|
|
file('assets_strippedUI/share/registry/res').mkdirs()
|
|
file("assets_strippedUI/share/config/soffice.cfg").mkdirs()
|
|
// just empty file
|
|
preserveDir.text = ""
|
|
}
|
|
}
|
|
|
|
|
|
task createStrippedConfigMain(type: Exec) {
|
|
dependsOn 'createStrippedConfig'
|
|
inputs.files "${liboInstdir}/share/registry/main.xcd", "${liboSrcRoot}/android/mobile-config.py"
|
|
outputs.file "assets_strippedUI/share/registry/main.xcd"
|
|
executable "${liboSrcRoot}/android/mobile-config.py"
|
|
args = ["${liboInstdir}/share/registry/main.xcd", "assets_strippedUI/share/registry/main.xcd"]
|
|
}
|
|
|
|
task createStrippedConfigRegistry(type: Exec) {
|
|
dependsOn 'createStrippedConfig'
|
|
inputs.files "${liboInstdir}/share/registry/res/registry_en-US.xcd", "${liboSrcRoot}/android/mobile-config.py"
|
|
outputs.file "assets_strippedUI/share/registry/res/registry_en-US.xcd"
|
|
executable "${liboSrcRoot}/android/mobile-config.py"
|
|
args = ["${liboInstdir}/share/registry/res/registry_en-US.xcd", "assets_strippedUI/share/registry/res/registry_en-US.xcd"]
|
|
doFirst {
|
|
file('assets_strippedUI/share/registry/res').mkdirs()
|
|
}
|
|
}
|
|
|
|
task createRCfiles {
|
|
inputs.file "liboSettings.gradle"
|
|
dependsOn copyUnpackAssets, copyAssets
|
|
def sofficerc = file('assets/unpack/program/sofficerc')
|
|
def fundamentalrc = file('assets/program/fundamentalrc')
|
|
def bootstraprc = file('assets/program/bootstraprc')
|
|
def unorc = file('assets/program/unorc')
|
|
def versionrc = file('assets/program/versionrc')
|
|
|
|
outputs.files sofficerc, fundamentalrc, unorc, bootstraprc, versionrc
|
|
|
|
doLast {
|
|
sofficerc.text = '''\
|
|
[Bootstrap]
|
|
Logo=1
|
|
NativeProgress=1
|
|
URE_BOOTSTRAP=file:///assets/program/fundamentalrc
|
|
HOME=$APP_DATA_DIR/cache
|
|
OSL_SOCKET_PATH=$APP_DATA_DIR/cache
|
|
'''.stripIndent()
|
|
|
|
fundamentalrc.text = '''\
|
|
[Bootstrap]
|
|
LO_LIB_DIR=file://$APP_DATA_DIR/lib/
|
|
BRAND_BASE_DIR=file:///assets
|
|
BRAND_SHARE_SUBDIR=share
|
|
CONFIGURATION_LAYERS=xcsxcu:${BRAND_BASE_DIR}/share/registry res:${BRAND_BASE_DIR}/share/registry
|
|
URE_BIN_DIR=file:///assets/ure/bin/dir/nothing-here/we-can/exec-anyway
|
|
'''.stripIndent()
|
|
|
|
bootstraprc.text = '''\
|
|
[Bootstrap]
|
|
InstallMode=<installmode>
|
|
ProductKey=LibreOffice '''+ "${liboVersionMajor}.${liboVersionMinor}" + '''
|
|
UserInstallation=file://$APP_DATA_DIR
|
|
'''.stripIndent()
|
|
|
|
unorc.text = '''\
|
|
[Bootstrap]
|
|
URE_INTERNAL_LIB_DIR=file://$APP_DATA_DIR/lib/
|
|
UNO_TYPES=file://$APP_DATA_DIR/program/udkapi.rdb file://$APP_DATA_DIR/program/offapi.rdb file://$APP_DATA_DIR/program/oovbaapi.rdb
|
|
UNO_SERVICES=file:///assets/program/services.rdb file:///assets/program/services/services.rdb
|
|
'''.stripIndent()
|
|
|
|
versionrc.text = '''\
|
|
[Version]
|
|
AllLanguages=en-US
|
|
buildid=''' + "${liboGitFullCommit}" + '''
|
|
ReferenceOOoMajorMinor=4.1
|
|
'''.stripIndent()
|
|
}
|
|
}
|
|
|
|
// creating the UI stuff is cheap, don't bother only applying it for the flavor...
|
|
preBuild.dependsOn 'createRCfiles',
|
|
'createStrippedConfigMain',
|
|
'createStrippedConfigRegistry',
|
|
'createFullConfig',
|
|
'copyAppResources'
|
|
|
|
clean.dependsOn 'cleanCopyAssets',
|
|
'cleanCreateStrippedConfig',
|
|
'cleanCreateFullConfig'
|