.github/workflows/release.yml
... ...
@@ -79,6 +79,12 @@ jobs:
79 79
distribution: 'temurin' # See 'Supported distributions' for available options
80 80
java-version: '8'
81 81
mvn-toolchain-id: 'JavaSE-1.8'
82
+ - name: Install JDK 17
83
+ uses: actions/setup-java@v4
84
+ with:
85
+ distribution: 'temurin' # See 'Supported distributions' for available options
86
+ java-version: '17'
87
+ mvn-toolchain-id: 'JavaSE-17'
82 88
- name: Install JDK 25
83 89
uses: actions/setup-java@v4
84 90
with:
... ...
@@ -108,6 +114,7 @@ jobs:
108 114
GOOGLE_MAPS_AUTHENTICATION_PARAMS: ${{ secrets.GOOGLE_MAPS_AUTHENTICATION_PARAMS }}
109 115
APP_PARAMETERS: "-Daws.region=eu-west-1"
110 116
JAVA8_HOME: ${{env.JAVA_HOME_8_X64}}
117
+ JAVA17_HOME: ${{env.JAVA_HOME_17_X64}}
111 118
run: |
112 119
./configuration/buildAndUpdateProduct.sh -x ${{ github.event.inputs.runner_cpus == '' && '4' || github.event.inputs.runner_cpus }} ${{ github.event.inputs.skip_tests == 'true' && '-t' || '' }} ${{ github.event.inputs.local_target_platform == 'true' && '-v' || '' }} build 2>&1
113 120
- name: show disk stats
.pipeline/config.yml
... ...
@@ -24,6 +24,9 @@ steps:
24 24
sapCumulusUpload:
25 25
pipelineId: '84d219f0-1abb-4b37-bad0-e2893612ce25'
26 26
versioningModel: 'semantic' # overwrite default from general section -> don't spam Cumulus
27
+ sapCallStagingService:
28
+ url: https://staging.repositories.cloud.sap/stage/api
29
+ profile: 'naas-mobile-staging-profile'
27 30
# Rotating vault secret if it is expring soon:
28 31
vaultRotateSecretId:
29 32
daysBeforeExpiry: 45
README.md
... ...
@@ -182,6 +182,7 @@ export AWS_S3_TEST_S3ACCESSKEY={key-for-your-S3-token}
182 182
export GEONAMES_ORG_USERNAMES={comma-separated-list-of-geonames.org-usernames}
183 183
export GOOGLE_MAPS_AUTHENTICATION_PARAMS=key={your-Google-Maps-API-key}
184 184
export JAVA8_HOME={location-of-your-JDK8}
185
+export JAVA17_HOME={location-of-your-JDK17}
185 186
export JAVA_HOME={location-of-your-JDK17-or-newer}
186 187
```
187 188
azure-pipelines/main.yml
... ...
@@ -28,7 +28,7 @@ resources:
28 28
# For available versions, please have a look here (use the tag, not the release name):
29 29
# https://github.tools.sap/SAPMobile/sap-mobile-pipeline/releases
30 30
# ----------
31
- ref: 'refs/tags/3.12.0' # last version to support Android API Level 33
31
+ ref: 'refs/tags/3.13.3'
32 32
33 33
#################################################################
34 34
######################### Pipeline Start ########################
... ...
@@ -47,8 +47,8 @@ extends:
47 47
testLaneName: 'test'
48 48
# requestAuthentication: true # enable if fetching dependencies from Artifactory or Nexus
49 49
appCenterSlug: 'sapsailing/sapsailing-android-apps'
50
- jdkVersion: 11
51
- androidVersion: 33
50
+ jdkVersion: 17
51
+ androidVersion: 35
52 52
# We are building more than one app from our repository; we will use branches
53 53
# to determine which app is to be built/released/signed
54 54
# Default: Race Manager App
build.gradle
... ...
@@ -13,7 +13,7 @@ buildscript {
13 13
}
14 14
}
15 15
dependencies {
16
- classpath 'com.android.tools.build:gradle:3.6.4'
16
+ classpath 'com.android.tools.build:gradle:7.0.4'
17 17
classpath "org.ajoberstar:grgit:2.3.0"
18 18
}
19 19
}
... ...
@@ -64,7 +64,7 @@ ext {
64 64
65 65
// testing - jvm
66 66
junit = "4.12"
67
- mockito = "1.9.5"
67
+ mockito = "5.8.0"
68 68
69 69
// testing - ui
70 70
test = "0.2"
cfg/VERSION
... ...
@@ -1 +1 @@
1
-1.4.122
1
+1.4.124
configuration/buildAndUpdateProduct.sh
... ...
@@ -235,7 +235,7 @@ fi
235 235
rm $START_DIR/build.log
236 236
237 237
if [[ "$@" == "clean" ]]; then
238
- JAVA_HOME="${JAVA8_HOME}" ./gradlew clean
238
+ JAVA_HOME="${JAVA17_HOME}" ./gradlew clean
239 239
if [[ $? != 0 ]]; then
240 240
exit 100
241 241
fi
... ...
@@ -693,11 +693,11 @@ if [[ "$@" == "build" ]] || [[ "$@" == "all" ]]; then
693 693
# mobile_extra="-P -with-not-android-relevant -P with-mobile"
694 694
695 695
echo "Building apps with Gradle..."
696
- JAVA_HOME="${JAVA8_HOME}" ./gradlew build
696
+ JAVA_HOME="${JAVA17_HOME}" ./gradlew build
697 697
if [[ ${PIPESTATUS[0]} != 0 ]]; then
698 698
exit 100
699 699
fi
700
- JAVA_HOME="${JAVA8_HOME}" ./gradlew assemble
700
+ JAVA_HOME="${JAVA17_HOME}" ./gradlew assemble
701 701
if [[ ${PIPESTATUS[0]} != 0 ]]; then
702 702
exit 100
703 703
fi
gradle.properties
... ...
@@ -21,5 +21,5 @@ org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
21 21
22 22
commonRepoURL=https://int.repositories.cloud.sap/artifactory/build-snapshots
23 23
sapGradleDistBaseUrl=https://int.repositories.cloud.sap/artifactory/build-releases/org/gradle/download/gradle/gradle
24
-sapGradleVersion=6.0.1
24
+sapGradleVersion=7.6
25 25
group=com.sap.sailing.android
gradle/wrapper/gradle-wrapper.properties
... ...
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
3 3
distributionPath=wrapper/dists
4 4
zipStoreBase=GRADLE_USER_HOME
5 5
zipStorePath=wrapper/dists
6
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
6
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
mobile/com.sap.sailing.android.buoy.positioning.app/files2sign.json
... ...
@@ -1,7 +1,7 @@
1 1
{
2 2
"ANDROID":[
3 3
{
4
- "version": "1.4.122",
4
+ "version": "1.4.124",
5 5
"groupid": "com.sap.sailing",
6 6
"file": "com.sap.sailing.android.buoy.positioning.app-unsigned.apk",
7 7
"artifactid": "com.sap.sailing.android.buoy.positioning.app"
mobile/com.sap.sailing.android.buoy.positioning.app/gradle.properties
... ...
@@ -1,3 +1,3 @@
1 1
packageName=com.sap.sailing.android.buoy.positioning.app
2
-appVersionCode=122
3
-appVersionName=1.4.122
2
+appVersionCode=124
3
+appVersionName=1.4.124
mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java
... ...
@@ -20,6 +20,7 @@ import com.sap.sailing.android.shared.logging.ExLog;
20 20
import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl;
21 21
import com.sap.sse.shared.util.impl.UUIDHelper;
22 22
23
+import android.annotation.SuppressLint;
23 24
import android.content.ContentProviderOperation;
24 25
import android.content.ContentResolver;
25 26
import android.content.ContentValues;
... ...
@@ -82,10 +83,10 @@ public class DatabaseHelper {
82 83
if (mc != null) {
83 84
mc.moveToFirst();
84 85
while (!mc.isAfterLast()) {
85
- final String markName = mc.getString((mc.getColumnIndex(Mark.MARK_NAME)));
86
+ @SuppressLint("Range") final String markName = mc.getString((mc.getColumnIndex(Mark.MARK_NAME)));
86 87
final String markIdAsString = mc.getString(mc.getColumnIndexOrThrow(Mark.MARK_ID));
87 88
final Serializable markId = UUIDHelper.tryUuidConversion(markIdAsString);
88
- MarkInfo markInfo = new MarkInfo(markId, markName,
89
+ @SuppressLint("Range") MarkInfo markInfo = new MarkInfo(markId, markName,
89 90
mc.getString((mc.getColumnIndex(Mark.MARK_CLASS_NAME))), checkinDigest);
90 91
marks.add(markInfo);
91 92
mc.moveToNext();
... ...
@@ -105,7 +106,7 @@ public class DatabaseHelper {
105 106
long timeStamp = mpc.getLong(mpc.getColumnIndexOrThrow(MarkPing.MARK_PING_TIMESTAMP));
106 107
double longitude = mpc.getDouble(mpc.getColumnIndexOrThrow(MarkPing.MARK_PING_LONGITUDE));
107 108
double latitude = mpc.getDouble(mpc.getColumnIndexOrThrow(MarkPing.MARK_PING_LATITUDE));
108
- MarkPingInfo markPingInfo = new MarkPingInfo(markID, GPSFixImpl.create(longitude, latitude, timeStamp),
109
+ @SuppressLint("Range") MarkPingInfo markPingInfo = new MarkPingInfo(markID, GPSFixImpl.create(longitude, latitude, timeStamp),
109 110
mpc.getDouble((mpc.getColumnIndex(MarkPing.MARK_PING_ACCURACY))));
110 111
marks.add(markPingInfo);
111 112
mpc.moveToNext();
mobile/com.sap.sailing.android.shared/AndroidManifest.xml
... ...
@@ -6,6 +6,7 @@
6 6
7 7
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
8 8
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
9
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
9 10
<uses-permission android:name="android.permission.CAMERA"/>
10 11
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
11 12
<uses-permission android:name="android.permission.INTERNET" />
mobile/com.sap.sailing.android.shared/build.gradle
... ...
@@ -50,8 +50,8 @@ dependencies {
50 50
51 51
/* Google Play Services */
52 52
api "com.google.android.gms:play-services-maps:${rootProject.ext.play_services}"
53
- api "com.google.android.gms:play-services-vision:${rootProject.ext.play_services}"
54 53
api "com.google.android.gms:play-services-location:${rootProject.ext.play_services}"
54
+ api "com.google.android.gms:play-services-vision:${rootProject.ext.play_services}"
55 55
56 56
/* license dialog */
57 57
api "de.psdev.licensesdialog:licensesdialog:${rootProject.ext.license_dialog}"
mobile/com.sap.sailing.android.tracking.app/gradle.properties
... ...
@@ -1,3 +1,3 @@
1 1
packageName=com.sap.sailing.android.tracking.app
2
-appVersionCode=122
3
-appVersionName=1.4.122
2
+appVersionCode=124
3
+appVersionName=1.4.124
mobile/com.sap.sailing.racecommittee.app/files2sign.json
... ...
@@ -1,7 +1,7 @@
1 1
{
2 2
"ANDROID":[
3 3
{
4
- "version": "1.4.122",
4
+ "version": "1.4.124",
5 5
"groupid": "com.sap.sailing",
6 6
"file": "com.sap.sailing.racecommittee.app-unsigned.apk",
7 7
"artifactid": "com.sap.sailing.racecommittee.app"
mobile/com.sap.sailing.racecommittee.app/gradle.properties
... ...
@@ -1,3 +1,3 @@
1 1
packageName=com.sap.sailing.racecommittee.app
2
-appVersionCode=122
3
-appVersionName=1.4.122
2
+appVersionCode=124
3
+appVersionName=1.4.124
wiki/howto/onboarding.md
... ...
@@ -35,7 +35,7 @@ First of all, make sure you've looked at [http://www.amazon.de/Patterns-Elements
35 35
36 36
### Installations
37 37
1. Eclipse IDE for Eclipse Committers, version ["2025-03"](https://www.eclipse.org/downloads/packages/release/2025-03/r/eclipse-ide-eclipse-committers). If you are using a Mac and want to use SAPJVM, this has to be the 64 bit version. This is because SAPJVM is not available for Apple Silicon Macs, and Eclipse's OS architecture must match the JVM architecture.
38
-2. JDK 1.8 (Java SE 8), ideal is the SAPJVM 1.8: Go to [https://tools.eu1.hana.ondemand.com/#cloud](https://tools.eu1.hana.ondemand.com/#cloud), scroll down to `SAP JVM` select your operating System, extract the downloaded .zip into desired location (e.g. Windows `C:\Program Files\Java`. If you want to make this your default JDK, set the `JAVA_HOME` variable to it. In any case, set the `JAVA8_HOME` variable to it which is required by a few build scripts where certain steps currently are not yet compatible with newer JDK releases, such as our Android build process, keeping us on Gradle 6.0.1 for the time being which isn't Java 17-compatible.
38
+2. JDK 1.8 (Java SE 8), ideal is the SAPJVM 1.8: Go to [https://tools.eu1.hana.ondemand.com/#cloud](https://tools.eu1.hana.ondemand.com/#cloud), scroll down to `SAP JVM` select your operating System, extract the downloaded .zip into desired location (e.g. Windows `C:\Program Files\Java`. If you want to make this your default JDK, set the `JAVA_HOME` variable to it. In any case, set the `JAVA8_HOME` variable to it which is required by a few build scripts where certain steps currently are not yet compatible with newer JDK releases. For Gradle builds (currently using Gradle 7.6), such as our Android build process, also install Java 17 and set the `JAVA17_HOME` variable to it.
39 39
3. Git (e.g. Git for Windows v2.18), [http://git-scm.com](http://git-scm.com) / [https://git-for-windows.github.io](https://git-for-windows.github.io)still
40 40
4. Configure git (see [Git repository configuration essentials](#onboarding-information_sap-sailing-analytics-development-setup_git-repository-configuration-essentials))
41 41
5. MongoDB (at least Release 6.0), download: [https://www.mongodb.com/](https://www.mongodb.com/). You may need to choose the community edition. In addition, install `mongosh`.
wiki/info/landscape/building-and-deploying.md
... ...
@@ -98,7 +98,7 @@ Since we want to build and release two apps out of one Git repo and ideally with
98 98
- ``release-buoy-pinger-app`` to release the SAP Sailing Buoy Pinger app with MoMa assembly ID 188
99 99
- ``release-race-manager-app`` to release the SAP Sailing Race Manager app with MoMa assembly ID 189
100 100
101
-Both these branches derive from the branch ``hyperspace`` which is more like a proxy branch as its original changes with the pipeline / fastlane definition and a few changes to the top-level README and .gitignore files have now been merged fully into the main branch where they have no averse effects. However, pushing onto the ``hyperspace`` branch will trigger the Azure DevOps pipeline for a full build including "tests" and "scans." However, since we don't have any app-specific UI tests and instead focus on unit tests for the logic shared also with the back-end and GWT UI ("common" and "shared" bundle projects), we "simulate" successful tests to satisfy the build pipeline's requirement for tests to be present. See files ``dummy/TEST-dummy.xml`` and ``dummy/jacoco/jacocoTestReport.xml``. This lets the "quality" stage of the Azure Pipeline pass without complaints. The two app-specific branches each make four important adjustments compared to the ``hyperspace``/``master`` branch:
101
+Both these branches derive from the branch ``hyperspace`` which is more like a proxy branch as its original changes with the pipeline / fastlane definition and a few changes to the top-level README and .gitignore files have now been merged fully into the main branch where they have no averse effects. However, pushing onto the ``hyperspace`` branch will trigger the Azure DevOps pipeline for a full build including "tests" and "scans." However, since we don't have any app-specific UI tests and instead focus on unit tests for the logic shared also with the back-end and GWT UI ("common" and "shared" bundle projects), we "simulate" successful tests to satisfy the build pipeline's requirement for tests to be present. See files ``dummy/TEST-dummy.xml`` and ``dummy/jacoco/jacocoTestReport.xml``. This lets the "quality" stage of the Azure Pipeline pass without complaints. The two app-specific branches each make four important adjustments compared to the ``hyperspace``/``main`` branch:
102 102
103 103
- The ``isRelease`` property is set to ``true`` for both app release branches to force the signing / releasing process
104 104
- The ``buildOutputPath`` is set to ``mobile/{app-directory}`` for the respective app to limit the number of files staged (artifacts staged are the unsigned .apk file, the files2sign.json and the zipped archive of all sources that went into the app)