From d0563c4becc1d4fde0ac571843016223ee7aae68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:54:21 -0500 Subject: [PATCH 01/34] Remove package from manifest and put in build.gradle --- android/hello_sdl_android/build.gradle | 1 + android/hello_sdl_android/src/main/AndroidManifest.xml | 3 +-- android/sdl_android/build.gradle | 2 ++ android/sdl_android/src/androidTest/AndroidManifest.xml | 3 +-- android/sdl_android/src/main/AndroidManifest.xml | 3 +-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/hello_sdl_android/build.gradle b/android/hello_sdl_android/build.gradle index a3f5563248..9af88b81c1 100755 --- a/android/hello_sdl_android/build.gradle +++ b/android/hello_sdl_android/build.gradle @@ -61,6 +61,7 @@ android { lintOptions { disable 'GoogleAppIndexingWarning' } + namespace 'com.sdl.hellosdlandroid' } diff --git a/android/hello_sdl_android/src/main/AndroidManifest.xml b/android/hello_sdl_android/src/main/AndroidManifest.xml index cdb26819db..2a0742fb3e 100755 --- a/android/hello_sdl_android/src/main/AndroidManifest.xml +++ b/android/hello_sdl_android/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools"> + diff --git a/android/sdl_android/src/main/AndroidManifest.xml b/android/sdl_android/src/main/AndroidManifest.xml index 4efa349fb7..a4f5ddee90 100644 --- a/android/sdl_android/src/main/AndroidManifest.xml +++ b/android/sdl_android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + From 28564dec90eb1ec4e43b6cce79533cf6520affde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:54:54 -0500 Subject: [PATCH 02/34] Update gradle version to 8.2.2 --- android/build.gradle | 2 +- android/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index b6c2dd894d..00a35420ed 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.2.2' // NOTE: Do not place your application dependencies here; they belong diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index c1077f26d3..a66019c485 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip From 1b1f7e31cde49eafd167301df2f07800a7a22fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:55:18 -0500 Subject: [PATCH 03/34] Update gradle version to 8.2.2 --- android/gradle.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/gradle.properties b/android/gradle.properties index 9e6fce102d..0f2dd31508 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -10,6 +10,9 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false +android.nonTransitiveRClass=false android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m From 18d36fa24330de67a9d1e95895a06043e4e8c098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:55:49 -0500 Subject: [PATCH 04/34] update maven plugin --- android/sdl_android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index 94264290ef..3d08187e41 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -67,7 +67,7 @@ buildscript { } dependencies { classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' - classpath 'com.vanniktech:gradle-maven-publish-plugin:0.13.0' + classpath 'com.vanniktech:gradle-maven-publish-plugin:0.27.0' } } From 1a5fe563da1578a9e02a0f8b401ed93803595016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:56:53 -0500 Subject: [PATCH 05/34] add buildFeatures aidl as suggested by AGP update assistant --- android/sdl_android/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index 3d08187e41..31ca5810cb 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -38,6 +38,9 @@ android { main.java.srcDirs += '../../base/src/main/java' androidTest.assets.srcDirs += '../../generator/rpc_spec/' } + buildFeatures { + aidl true + } namespace 'com.smartdevicelink' testNamespace 'com.smartdevicelink.test' } From 088e811ec7ff7543a52f470305d87356465251ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:57:18 -0500 Subject: [PATCH 06/34] Formatting --- android/sdl_android/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index 31ca5810cb..d2f7b311af 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -38,9 +38,11 @@ android { main.java.srcDirs += '../../base/src/main/java' androidTest.assets.srcDirs += '../../generator/rpc_spec/' } + buildFeatures { aidl true } + namespace 'com.smartdevicelink' testNamespace 'com.smartdevicelink.test' } From b49b173ab8e0c0b9175e4e7ebf0c230f60732dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:58:01 -0500 Subject: [PATCH 07/34] add androidTestImplementation 'androidx.test:rules:1.5.0' to test permission in unit test, update unit test imports --- android/sdl_android/build.gradle | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index d2f7b311af..0cbe2ba956 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -57,11 +57,12 @@ dependencies { api 'androidx.annotation:annotation:1.1.0' annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0' - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:5.7.0' + androidTestImplementation 'androidx.test:rules:1.5.0' androidTestImplementation 'org.mockito:mockito-core:5.7.0' androidTestImplementation 'org.mockito:mockito-android:5.7.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.5.1' } From e0fbb56bd85f95008d34f6492df22d237e571eeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:59:26 -0500 Subject: [PATCH 08/34] Add permissions queries for routerService to Android test manifest --- .../sdl_android/src/androidTest/AndroidManifest.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/android/sdl_android/src/androidTest/AndroidManifest.xml b/android/sdl_android/src/androidTest/AndroidManifest.xml index 9441085520..90c9aa52cd 100644 --- a/android/sdl_android/src/androidTest/AndroidManifest.xml +++ b/android/sdl_android/src/androidTest/AndroidManifest.xml @@ -12,6 +12,19 @@ android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.smartdevicelink.test" /> + + + + + + + + + + + + + From 7e5310dcebeff07538e5570ab42737a119ce02c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 14:59:53 -0500 Subject: [PATCH 09/34] Add TestSdlReceiver for unit test --- .../src/androidTest/AndroidManifest.xml | 10 ++++++++++ .../java/com/smartdevicelink/TestSdlReceiver.java | 14 ++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 android/sdl_android/src/androidTest/java/com/smartdevicelink/TestSdlReceiver.java diff --git a/android/sdl_android/src/androidTest/AndroidManifest.xml b/android/sdl_android/src/androidTest/AndroidManifest.xml index 90c9aa52cd..553fb6cda3 100644 --- a/android/sdl_android/src/androidTest/AndroidManifest.xml +++ b/android/sdl_android/src/androidTest/AndroidManifest.xml @@ -29,6 +29,16 @@ + + + + + + + diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/TestSdlReceiver.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/TestSdlReceiver.java new file mode 100644 index 0000000000..91789a6598 --- /dev/null +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/TestSdlReceiver.java @@ -0,0 +1,14 @@ +package com.smartdevicelink; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +/** + * Added so we pass IntegrationValidator when running unit test. + */ +public class TestSdlReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + } +} \ No newline at end of file From a1390bd299e6ec17dc395ee948bb42c8128beb9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:06:38 -0500 Subject: [PATCH 10/34] Reset SDK_INT version in AudioStreamManagerTest after it is changed for tests --- .../audio/AudioStreamManagerTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java index d81b9ccc62..8c583b3062 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java @@ -134,99 +134,131 @@ public void onComplete(boolean success) { } public void testWithSquareSampleAudio16BitAnd8KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._8KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(8000, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd16KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._16KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(16000, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd22KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._22KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(22050, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd44KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._44KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(44100, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd8KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._8KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(8000, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd16KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._16KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(16000, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd22KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._22KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(22050, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd44KhzApi16() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._44KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(44100, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd8KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._8KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(8000, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd16KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._16KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(16000, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd22KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._22KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(22050, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio16BitAnd44KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._44KHZ, BitsPerSample._16_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(44100, SampleType.SIGNED_16_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd8KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._8KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(8000, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd16KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._16KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(16000, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd22KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._22KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(22050, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } public void testWithSquareSampleAudio8BitAnd44KhzApi21() throws Exception { + int versionCode = Build.VERSION.SDK_INT; setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 21); AudioPassThruCapabilities audioPassThruCapabilities = new AudioPassThruCapabilities(SamplingRate._44KHZ, BitsPerSample._8_BIT, AudioType.PCM); runFullAudioManagerDecodeFlowWithSquareSampleAudio(44100, SampleType.UNSIGNED_8_BIT, audioPassThruCapabilities); + setFinalStatic(Build.VERSION.class.getField("SDK_INT"), versionCode); } private int testFullAudioManagerDecodeFlowCorrectCounter = 0; From 1c6329175540a29ebad3ba9ecba7c5729970d383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:09:04 -0500 Subject: [PATCH 11/34] update manager layer test sleep calls to 1 sec --- .../smartdevicelink/managers/screen/SoftButtonManagerTests.java | 2 +- .../screen/choiceset/PreloadPresentChoicesOperationTests.java | 2 +- .../screen/choiceset/PresentKeyboardOperationTests.java | 2 +- .../smartdevicelink/managers/screen/menu/MenuManagerTests.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java index 7e0890e18a..8e2f3326f1 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java @@ -178,7 +178,7 @@ public Void answer(InvocationOnMock invocation) { private void sleep() { try { - Thread.sleep(100); + Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadPresentChoicesOperationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadPresentChoicesOperationTests.java index 8a8b8c64eb..59fd5ad4cf 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadPresentChoicesOperationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadPresentChoicesOperationTests.java @@ -246,7 +246,7 @@ public void testSetSelectedCellWithId() { private void sleep() { try { - Thread.sleep(100); + Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentKeyboardOperationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentKeyboardOperationTests.java index 5d6df79587..60d6b6bf15 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentKeyboardOperationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PresentKeyboardOperationTests.java @@ -129,7 +129,7 @@ public void testGetPerformInteraction() { private void sleep() { try { - Thread.sleep(100); + Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java index 863f0b4d9f..f8015ef496 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java @@ -785,7 +785,7 @@ private List filterMenuCellsWithStatusList(List menuCells, L private void sleep() { try { - Thread.sleep(250); + Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } From 486777b4a9c32fd235d5e1e7a8745885ffd4c246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:10:21 -0500 Subject: [PATCH 12/34] Update DeviceUtil.isEmulator to catch new emulator for ci checks --- .../java/com/smartdevicelink/test/util/DeviceUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/util/DeviceUtil.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/util/DeviceUtil.java index 389403eafb..c74c3a3b44 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/util/DeviceUtil.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/util/DeviceUtil.java @@ -10,6 +10,7 @@ public static boolean isEmulator() { || Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK built for") || Build.MANUFACTURER.contains("Genymotion") + || Build.DEVICE.startsWith("emu") || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) || (Build.BRAND.startsWith("Android") && Build.DEVICE.startsWith("generic")) || (Build.PRODUCT != null && Build.PRODUCT.startsWith("sdk_google_phone")) From 0f3792d9fe31dcbde805dd2fc179ae9873672023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:12:14 -0500 Subject: [PATCH 13/34] grant BLUETOOTH_CONNECT for TransportManagerTests --- .../smartdevicelink/transport/TransportManagerTests.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportManagerTests.java index 06a31bc59f..42d09c0537 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportManagerTests.java @@ -1,9 +1,12 @@ package com.smartdevicelink.transport; +import android.Manifest; import android.content.ComponentName; +import android.os.Build; import android.os.Looper; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.rule.GrantPermissionRule; import com.smartdevicelink.protocol.SdlPacket; import com.smartdevicelink.protocol.SdlPacketFactory; @@ -13,6 +16,7 @@ import com.smartdevicelink.transport.utl.TransportRecord; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,6 +33,9 @@ @RunWith(AndroidJUnit4.class) public class TransportManagerTests { + + @Rule + public GrantPermissionRule btRuntimePermissionRule = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? GrantPermissionRule.grant(Manifest.permission.BLUETOOTH_CONNECT) : null; MultiplexTransportConfig config; final TransportRecord defaultBtRecord = new TransportRecord(TransportType.BLUETOOTH, "12:34:56:78:90"); final ComponentName routerServiceComponentName = new ComponentName("com.smartdevicelink.test", "com.smartdevicelink.test.SdlRouterService"); From 2e53014080fa8a01b791c1ba22ba116af8729512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:13:37 -0500 Subject: [PATCH 14/34] grant BLUETOOTH_CONNECT permission for MediaStreamingStatusTests --- .../com/smartdevicelink/util/MediaStreamingStatusTests.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/util/MediaStreamingStatusTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/util/MediaStreamingStatusTests.java index b2d1cf890c..635be1dcaa 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/util/MediaStreamingStatusTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/util/MediaStreamingStatusTests.java @@ -1,11 +1,13 @@ package com.smartdevicelink.util; +import android.Manifest; import android.content.Context; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.os.Build; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.rule.GrantPermissionRule; import com.smartdevicelink.managers.SdlManager; import com.smartdevicelink.managers.SdlManagerListener; @@ -14,6 +16,7 @@ import com.smartdevicelink.transport.MultiplexTransportConfig; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -35,6 +38,8 @@ public class MediaStreamingStatusTests { + @Rule + public GrantPermissionRule btRuntimePermissionRule = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? GrantPermissionRule.grant(Manifest.permission.BLUETOOTH_CONNECT) : null; @Mock private AudioManager audioManager = mock(AudioManager.class); From fd5eab8e378246f3bc909ff499370c9586520193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:15:22 -0500 Subject: [PATCH 15/34] Ignore TransportBrokerTest with note to have an app with a running RouterService for test to work. --- .../java/com/smartdevicelink/transport/TransportBrokerTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java index 4ee6926aa7..99abb67ea6 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java @@ -13,6 +13,7 @@ import com.smartdevicelink.test.util.DeviceUtil; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,6 +23,7 @@ import static junit.framework.TestCase.assertTrue; @RunWith(AndroidJUnit4.class) +@Ignore // MUST HAVE AN SDL APP WITH A ROUTER SERVICE RUNNING ON PHONE TO RUN THESE TEST public class TransportBrokerTest { //FIXME this test class needs to be fixed. At this point these tests are not helpful RouterServiceValidator rsvp; // public TransportBrokerThread(Context context, String appId, ComponentName service){ From 2912fb3f809b7ac4ad46da596483435dd7f06956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:18:50 -0500 Subject: [PATCH 16/34] MultiplexBluetoothTransportTest testStateTransitions only check state if device is not an emulator, New emulator actually works, so to prevent incompatibility with older emulators only check on actual devices --- .../test/transport/MultiplexBluetoothTransportTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/MultiplexBluetoothTransportTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/MultiplexBluetoothTransportTest.java index 5d9f752681..aa2d32dfd5 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/MultiplexBluetoothTransportTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/MultiplexBluetoothTransportTest.java @@ -52,9 +52,7 @@ public void handleMessage(Message msg) { assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_NONE); bluetooth.start(); - if (DeviceUtil.isEmulator()) { - assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_NONE); - } else { + if (!DeviceUtil.isEmulator()) { assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_LISTEN); } From 154a98aa13c2be0db93a528055e235c023c37c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:37:42 -0500 Subject: [PATCH 17/34] Starting with API 30 we can not use reflection to fake NetworkCapabilities, only doing certain checks on API levels less then 30 for WiFiSocketFactoryTest --- .../test/transport/WiFiSocketFactoryTest.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java index 8cbaa3c72f..05eb70a35c 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java @@ -111,8 +111,7 @@ private static NetworkCapabilities createNetworkCapabilitiesWithTransport(int tr // Since NetworkCapabilities class is 'final', we cannot create its mock. To create a dummy // instance, here we use reflection to call its constructor and a method that are marked // with "@hide". - // It is possible that these methods will not be available in a future version of Android. - // In that case we need to update our code accordingly. + // Starting in API level 30, this no longer works. Class c = NetworkCapabilities.class; try { Method addTransportTypeMethod = c.getMethod("addTransportType", int.class); @@ -176,7 +175,9 @@ public void testWithWiFiNetwork() { Socket ret = WiFiSocketFactory.createSocket(mMockContext); assertNotNull("createSocket() should always return a Socket instance", ret); - assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + } } // test the case where SDK_INT is less than 21 @@ -272,7 +273,9 @@ public void testNetworkListHasNull() { Socket ret = WiFiSocketFactory.createSocket(mMockContext); assertNotNull("createSocket() should always return a Socket instance", ret); - assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + } } // test the case where the phone isn't connected to Wi-Fi network @@ -316,7 +319,9 @@ public void testSocketFactoryNull2() { Socket ret = WiFiSocketFactory.createSocket(mMockContext); assertNotNull("createSocket() should always return a Socket instance", ret); - assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + } } // test the case where we get an exception with SocketFactory.createSocket() @@ -349,6 +354,8 @@ public void testFactoryReturnsException2() throws IOException { Socket ret = WiFiSocketFactory.createSocket(mMockContext); assertNotNull("createSocket() should always return a Socket instance", ret); - assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + assertEquals("Returned Socket should be created through SocketFactory", mWiFiBoundSocket, ret); + } } } From d1862296d462a221d54a6564349c86f2dfa3f529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:38:54 -0500 Subject: [PATCH 18/34] update comment for WiFiSocketFactoryTest --- .../smartdevicelink/test/transport/WiFiSocketFactoryTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java index 05eb70a35c..41f33b38d9 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/WiFiSocketFactoryTest.java @@ -112,6 +112,7 @@ private static NetworkCapabilities createNetworkCapabilitiesWithTransport(int tr // instance, here we use reflection to call its constructor and a method that are marked // with "@hide". // Starting in API level 30, this no longer works. + // There is not a good way to bypass this so some test will check API level Class c = NetworkCapabilities.class; try { Method addTransportTypeMethod = c.getMethod("addTransportType", int.class); From d3027b3bc147ad93e39c4b08e9dd8991f074df8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Wed, 14 Feb 2024 15:42:17 -0500 Subject: [PATCH 19/34] Update yml to target proper API level, use newer JDK and beef up emulator --- .github/workflows/android.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index db6fc40aa9..a1de2f2a4f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] jobs: test_Android: - runs-on: macOS-latest + runs-on: macos-13 steps: - name: Checkout @@ -15,13 +15,17 @@ jobs: - name: Setup JDK uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 - name: Sdl Android Tests # For more info, please check out: https://github.com/marketplace/actions/android-emulator-runner uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 29 + api-level: 34 + cores: 3 + ram-size: 6000M + heap-size: 4000M + arch: x86_64 script: ./android/gradlew -p ./android :sdl_android:connectedCheck - name: Hello Sdl Android Tests @@ -33,7 +37,7 @@ jobs: yml: ./codecov.yml test_Java: - runs-on: macOS-latest + runs-on: macos-13 steps: - name: Checkout From 690252c6dc60c5efc1dd360ffe1b8f6488b9454d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 09:51:15 -0500 Subject: [PATCH 20/34] Update targetSdkVersion to 36 and minSdkVersion to 21 --- android/hello_sdl_android/build.gradle | 6 +++--- android/sdl_android/build.gradle | 8 +++----- android/sdl_android/src/androidTest/AndroidManifest.xml | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/android/hello_sdl_android/build.gradle b/android/hello_sdl_android/build.gradle index 9af88b81c1..bc3a8c99e6 100755 --- a/android/hello_sdl_android/build.gradle +++ b/android/hello_sdl_android/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 34 + compileSdkVersion 36 defaultConfig { applicationId "com.sdl.hellosdlandroid" - minSdkVersion 16 - targetSdkVersion 34 + minSdkVersion 21 + targetSdkVersion 36 versionCode 1 versionName "1.0" resValue "string", "app_name", "Hello Sdl Android" diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index 0cbe2ba956..a5feb25d26 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -1,12 +1,10 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 34 + compileSdkVersion 36 defaultConfig { - minSdkVersion 16 - targetSdkVersion 34 - versionCode 26 - versionName new File(projectDir.path, ('/../../VERSION')).text.trim() + minSdkVersion 21 + targetSdkVersion 36 buildConfigField "String", "VERSION_NAME", '\"' + versionName + '\"' resValue "string", "SDL_LIB_VERSION", '\"' + versionName + '\"' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' diff --git a/android/sdl_android/src/androidTest/AndroidManifest.xml b/android/sdl_android/src/androidTest/AndroidManifest.xml index 553fb6cda3..1073202a5a 100644 --- a/android/sdl_android/src/androidTest/AndroidManifest.xml +++ b/android/sdl_android/src/androidTest/AndroidManifest.xml @@ -1,6 +1,6 @@ - + From 8fc0b9d848015f49474adf9f80a3d64f4f4ecc40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 09:51:44 -0500 Subject: [PATCH 21/34] Update gradle to 8.13 --- android/build.gradle | 2 +- android/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 00a35420ed..b46d5156f3 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.2.2' + classpath 'com.android.tools.build:gradle:8.13.0' // NOTE: Do not place your application dependencies here; they belong diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index a66019c485..83a84690dc 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip From 50402b385ac96b86fd227a04021febcd76fd535f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 09:52:09 -0500 Subject: [PATCH 22/34] update dependencies --- android/hello_sdl_android/build.gradle | 4 ++-- android/sdl_android/build.gradle | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/android/hello_sdl_android/build.gradle b/android/hello_sdl_android/build.gradle index bc3a8c99e6..11a59919aa 100755 --- a/android/hello_sdl_android/build.gradle +++ b/android/hello_sdl_android/build.gradle @@ -70,7 +70,7 @@ dependencies { androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.7.1' implementation project(path: ':sdl_android') - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' } \ No newline at end of file diff --git a/android/sdl_android/build.gradle b/android/sdl_android/build.gradle index a5feb25d26..8a577fd8bd 100644 --- a/android/sdl_android/build.gradle +++ b/android/sdl_android/build.gradle @@ -50,19 +50,19 @@ ext { VERSION_NAME = "$project.android.defaultConfig.versionName" } dependencies { api fileTree(dir: 'libs', include: ['*.jar']) //api 'com.livio.taskmaster:taskmaster:0.6.0' - api 'com.smartdevicelink:bson_java_port:1.2.5' + api 'com.smartdevicelink:bson_java_port:1.2.6' api 'androidx.lifecycle:lifecycle-extensions:2.2.0' - api 'androidx.annotation:annotation:1.1.0' - annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0' + api 'androidx.annotation:annotation:1.9.1' + annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.9.4' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:5.7.0' - androidTestImplementation 'androidx.test:rules:1.5.0' - androidTestImplementation 'org.mockito:mockito-core:5.7.0' - androidTestImplementation 'org.mockito:mockito-android:5.7.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - androidTestImplementation 'androidx.test.espresso:espresso-intents:3.5.1' + testImplementation 'org.mockito:mockito-core:5.20.0' + androidTestImplementation 'androidx.test:rules:1.7.0' + androidTestImplementation 'org.mockito:mockito-core:5.20.0' + androidTestImplementation 'org.mockito:mockito-android:5.20.0' + androidTestImplementation 'androidx.test.ext:junit:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' + androidTestImplementation 'androidx.test.espresso:espresso-intents:3.7.0' } buildscript { @@ -71,7 +71,7 @@ buildscript { } dependencies { classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' - classpath 'com.vanniktech:gradle-maven-publish-plugin:0.27.0' + classpath 'com.vanniktech:gradle-maven-publish-plugin:0.34.0' } } From 88620ca3e2d24631a4e3ffa2d36bef0bf4b7a6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 10:21:54 -0500 Subject: [PATCH 23/34] update CI --- .github/workflows/android.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a1de2f2a4f..b29c8fd66e 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] jobs: test_Android: - runs-on: macos-13 + runs-on: macos-15-intel steps: - name: Checkout @@ -21,10 +21,10 @@ jobs: # For more info, please check out: https://github.com/marketplace/actions/android-emulator-runner uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 34 - cores: 3 - ram-size: 6000M - heap-size: 4000M + api-level: 36 + cores: 1 + ram-size: 6144 + heap-size: 512 arch: x86_64 script: ./android/gradlew -p ./android :sdl_android:connectedCheck From 3f58414238c12407dd56d05eff6acf8d5515285d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 10:23:55 -0500 Subject: [PATCH 24/34] downgrade api level on CI --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index b29c8fd66e..12143351e3 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,7 +21,7 @@ jobs: # For more info, please check out: https://github.com/marketplace/actions/android-emulator-runner uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 36 + api-level: 35 cores: 1 ram-size: 6144 heap-size: 512 From 430899904d4009af61a6288c85484ab42e05f340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 10:27:21 -0500 Subject: [PATCH 25/34] try arm runner with api level 36 --- .github/workflows/android.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 12143351e3..a907fe62d5 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] jobs: test_Android: - runs-on: macos-15-intel + runs-on: macos-26 steps: - name: Checkout @@ -21,7 +21,7 @@ jobs: # For more info, please check out: https://github.com/marketplace/actions/android-emulator-runner uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 35 + api-level: 36 cores: 1 ram-size: 6144 heap-size: 512 From a4bacbd247a3d07d68f530269e242c94b1d4d3c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 10:32:35 -0500 Subject: [PATCH 26/34] update android test to use arm based emulator for api 36 --- .github/workflows/android.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a907fe62d5..d3c9933774 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,16 +17,17 @@ jobs: with: java-version: 17 - - name: Sdl Android Tests - # For more info, please check out: https://github.com/marketplace/actions/android-emulator-runner + - name: SDL Android Tests (ARM64) uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 36 + api-level: 36 + target: google_apis + arch: arm64-v8a cores: 1 ram-size: 6144 heap-size: 512 - arch: x86_64 script: ./android/gradlew -p ./android :sdl_android:connectedCheck + emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -no-metrics - name: Hello Sdl Android Tests run: ./android/gradlew -p ./android/hello_sdl_android test From 7bb575c7d60c30b27ef17fb02f439b8baa59d044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 10:53:40 -0500 Subject: [PATCH 27/34] update to run on ubuntu with x86_64 android image --- .github/workflows/android.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d3c9933774..f3ad156097 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] jobs: test_Android: - runs-on: macos-26 + runs-on: ubuntu-latest steps: - name: Checkout @@ -22,10 +22,8 @@ jobs: with: api-level: 36 target: google_apis - arch: arm64-v8a - cores: 1 - ram-size: 6144 - heap-size: 512 + arch: x86_64 + profile: "pixel_7" script: ./android/gradlew -p ./android :sdl_android:connectedCheck emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -no-metrics From e3e69c2385ea5ae92e98c923e5722db95fbab98b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 11:20:43 -0500 Subject: [PATCH 28/34] change back to mac --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index f3ad156097..d3fb50f53b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] jobs: test_Android: - runs-on: ubuntu-latest + runs-on: macos-15-intel steps: - name: Checkout From c48ff18c1700eff39f0b81378954933d6a725185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 11:57:56 -0500 Subject: [PATCH 29/34] beef up emulator --- .github/workflows/android.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d3fb50f53b..3591402e9b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,7 +25,10 @@ jobs: arch: x86_64 profile: "pixel_7" script: ./android/gradlew -p ./android :sdl_android:connectedCheck - emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -no-metrics + emulator-options: > + -no-window -gpu host -no-boot-anim -no-audio -no-metrics + -camera-back none -camera-front none + -cores 6 -memory 6144 - name: Hello Sdl Android Tests run: ./android/gradlew -p ./android/hello_sdl_android test From 187a94f32f7998a1b2fe0e10bb413356fc611147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 13:25:38 -0500 Subject: [PATCH 30/34] update emulator options --- .github/workflows/android.yml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 3591402e9b..8c09886737 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -16,20 +16,23 @@ jobs: uses: actions/setup-java@v1 with: java-version: 17 - - - name: SDL Android Tests (ARM64) + + - name: SDL Android Tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 36 - target: google_apis + api-level: 36 + target: google_apis arch: x86_64 - profile: "pixel_7" - script: ./android/gradlew -p ./android :sdl_android:connectedCheck + profile: pixel_7 + disable-animations: true + emulator-boot-timeout: 1200 emulator-options: > - -no-window -gpu host -no-boot-anim -no-audio -no-metrics - -camera-back none -camera-front none - -cores 6 -memory 6144 - + -no-window -gpu host -no-boot-anim -no-audio -no-metrics + -camera-back none -camera-front none + -cores 4 -memory 4096 + script: ./android/gradlew -p ./android :sdl_android:connectedDebugAndroidTest --max-workers=4 + + - name: Hello Sdl Android Tests run: ./android/gradlew -p ./android/hello_sdl_android test From c2b62f75379a1bd92bd358e5e16e3a5b55df05c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 13:57:00 -0500 Subject: [PATCH 31/34] Use ubuntu runner --- .github/workflows/android.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 8c09886737..1bb437a3f9 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] jobs: test_Android: - runs-on: macos-15-intel + runs-on: ubuntu-latest steps: - name: Checkout @@ -26,12 +26,7 @@ jobs: profile: pixel_7 disable-animations: true emulator-boot-timeout: 1200 - emulator-options: > - -no-window -gpu host -no-boot-anim -no-audio -no-metrics - -camera-back none -camera-front none - -cores 4 -memory 4096 - script: ./android/gradlew -p ./android :sdl_android:connectedDebugAndroidTest --max-workers=4 - + script: ./android/gradlew -p ./android :sdl_android:connectedDebugAndroidTest - name: Hello Sdl Android Tests run: ./android/gradlew -p ./android/hello_sdl_android test From b77f68eb80df7649f845d611194bd281fa3c31c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 14:13:26 -0500 Subject: [PATCH 32/34] improve emulator boot time --- .github/workflows/android.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 1bb437a3f9..f5132c590b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,9 +21,12 @@ jobs: uses: reactivecircus/android-emulator-runner@v2 with: api-level: 36 - target: google_apis + target: default arch: x86_64 profile: pixel_7 + no-audio: true + ram-size: 2048M + disk-size: 4096M disable-animations: true emulator-boot-timeout: 1200 script: ./android/gradlew -p ./android :sdl_android:connectedDebugAndroidTest From 7e3fd13bdf8d0f36d530d56fb4902a3b0e26211c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 14:16:47 -0500 Subject: [PATCH 33/34] use google_apis for the emulator type --- .github/workflows/android.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index f5132c590b..2b6baace75 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,14 +21,14 @@ jobs: uses: reactivecircus/android-emulator-runner@v2 with: api-level: 36 - target: default + target: google_apis arch: x86_64 profile: pixel_7 - no-audio: true - ram-size: 2048M - disk-size: 4096M + ram-size: 2048M + disk-size: 4096M disable-animations: true emulator-boot-timeout: 1200 + emulator-options: "-no-window -no-snapshot -no-audio" script: ./android/gradlew -p ./android :sdl_android:connectedDebugAndroidTest - name: Hello Sdl Android Tests From 15f35e3eba3fc04bfd9d9be1e2331eb5b84d2fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJKAST=E2=80=9D?= Date: Tue, 4 Nov 2025 15:03:54 -0500 Subject: [PATCH 34/34] Add enable kvm to make Android emulator run faster --- .github/workflows/android.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 2b6baace75..029d33910c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,6 +17,13 @@ jobs: with: java-version: 17 + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + ls -l /dev/kvm || true + - name: SDL Android Tests uses: reactivecircus/android-emulator-runner@v2 with: @@ -40,7 +47,7 @@ jobs: yml: ./codecov.yml test_Java: - runs-on: macos-13 + runs-on: ubuntu-latest steps: - name: Checkout