office-gobmx/android/source/build.gradle
Michael Weghorn 312b9a67f0 android: Update Android Gradle Plugin to 8.3.2
... as suggested by Android Studio.

Also update the Lint baseline file, as the build would
otherwise fail due to this new warning:

    > Task :lintReportStrippedUIEditingDebug
    Wrote HTML report to file:///home/michi/development/git/libreoffice-WORKTREE-android/android/source/build/reports/lint-results-strippedUIEditingDebug.html

    > Task :lintStrippedUIEditingDebug FAILED
    /home/michi/development/git/libreoffice-WORKTREE-android/android/source/lint-baseline.xml: Information: 213 errors and 1 warning were filtered out because they are listed in the baseline file, lint-baseline.xml
     [LintBaseline]
    /home/michi/development/git/libreoffice-WORKTREE-android/android/source/lint-baseline.xml: Information: 6 errors/warnings were listed in the baseline file (lint-baseline.xml) but not found in the project; perhaps they have been fixed? Another possible explanation is that lint recently stopped analyzing (and including results from) dependent projects by default. You can turn this back on with android.lintOptions.checkDependencies=true. Unmatched issue types: PrivateResource, RedundantNamespace, TypographyEllipsis (3), UnusedNamespace [LintBaseline]
    /home/michi/development/git/libreoffice-WORKTREE-android/android/source/AndroidManifest.xml:109: Error: Should not restrict activity to fixed orientation. This may not be suitable for different form factors, causing the app to be letterboxed. [DiscouragedApi]
                android:screenOrientation="landscape" >
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

       Explanation for issues of type "DiscouragedApi":
       Discouraged APIs are allowed and are not deprecated, but they may be unfit
       for common use (e.g. due to slow performance or subtle behavior).

    1 errors, 0 warnings (213 errors, 1 warning filtered by baseline lint-baseline.xml)

    FAILURE: Build failed with an exception.

Change-Id: I621b2334fef954bcd341cdde9034187f455339e7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166114
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-04-15 20:06:34 +02:00

324 lines
11 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:8.3.2'
}
}
// compile-time dependencies
dependencies {
implementation fileTree(dir: "${liboInstdir}/${liboUREJavaFolder}", include: [
"java_uno.jar",
"libreoffice.jar",
"unoloader.jar"
])
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation "androidx.multidex:multidex:2.0.1"
}
android {
namespace 'org.libreoffice'
compileSdk 34
buildFeatures {
buildConfig = true
}
// 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 34
// 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'
}
fullUI.dimension "default"
}
lint {
warningsAsErrors true
// ignore missing or extra translations, since these are tracked/managed via Weblate
ignore 'ExtraTranslation', 'MissingTranslation'
// don't error-out on external updates (new gradle plugin, library versions
// or target API become available)
// don't error-out on TypographyEllipsis, since this can be introduced with
// new translations, and those are handled in Weblate
informational 'AndroidGradlePluginVersion', 'GradleDependency', 'NewerVersionAvailable', 'OldTargetApi', 'TypographyEllipsis'
// don't fail on pre-existing issues
// These should be dealt with at some point, though.
// To update lint-baseline.xml, just remove the file and run the build again.
baseline file("lint-baseline.xml")
// s.a. lint.xml that contains further config
}
}
// show warnings about use of deprecated API
tasks.withType(JavaCompile).configureEach {
options.deprecation = true
}
/* 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"
}
}
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'