76ce71dfe503f3a93e8be6500234d69cdfec1880
.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) |