Make app run on Android 5 Lollipop (sdkversion 21)
See original GitHub issueFeature description
The Corona warning app should be able to run on Android 5 (Lollipop, skdversion 21).
Problem and motivation
According to the Android distribution chart in Android Studio Lollipop (5.1 and 5.2) is used by 9.2 percent. With a total market share of 75% and around 90% of the german population owning a smartphone the corona app is excluding approx. 5.163.571 people from using it (on Android alone).
Lollipop is used on smartphones, which where released 3-4 years ago. It’s clear, that people, who buy used phones or keep phones longer (that is: people with not much money!) are the ones, who can’t use the app.
I don’t think this is acceptable given the fact, that the whole population should be protected.
Is this something you’re interested in working on
Yes, I would be willing to work on this and already began, but I need help (and also, I’m neither experienced in writing Kotlin, nor with writing Android Apps, so if anyone else want’s to jump in, please do!).
I was able to get the (debug) app build for sdkversion 21 by upgrading to androidx.security:security-crypto:1.1.0-alpha01
.
You can take a look at this here: https://github.com/messersm/cwa-app-android/commit/ab555698e64ef613f9485a0886109d1cbc121fe0
However, the application crashes on start, with: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/security/keystore/KeyGenParameterSpec$Builder;
(Line 165). I guess, this has to do with the fact, that androidx.security:security-crypto:1.1.0-alpha01
doesn’t use the keystore on lollipop (see here: https://developer.android.com/jetpack/androidx/releases/security#security-crypto-1.1.0-alpha01) and some libraries are loaded by name lookups (since the app did compile and install).
I/art (28740): Late-enabling -Xcheck:jni
I/ActivityManager( 679): Start proc 28740:de.rki.coronawarnapp/u0a158 for activity de.rki.coronawarnapp/.ui.LauncherActivity
D/ADB_SERVICES(22522): Adding socket 14 pid 28740 to jdwp process list
W/ADB_SERVICES(22522): create_local_service_socket() name=jdwp:28740
W/ADB_SERVICES(22522): service_to_fd() name=jdwp:28740
W/ADB_SERVICES(22522): looking for pid 28740 in JDWP process list return fds0(22) fds1(23)
W/ADB_SERVICES(22522): LS(7): bound to 'jdwp:28740' via 22
W/ADB_SERVICES(22522): trying to write to JDWP socket=14 pid=28740 count=1 out_fds=23
I/libPerfService( 679): perfSetFavorPid - pid:28740, 7044
D/ActivityManager( 679): getContentProviderImpl: from caller=android.app.ApplicationThreadProxy@160c899d (pid=28740, userId=0) to get content provider settings cpr=ContentProviderRecord{24d9fc38 u0 com.android.providers.settings/.SettingsProvider}
V/SettingsInterface(28740): invalidate [system]: current 300 != cached 0
D/ActivityThread(28740): hoder:android.app.IActivityManager$ContentProviderHolder@393788a,provider,holder.Provider:android.content.ContentProviderProxy@39408efb
D/Proxy (28740): setHttpRequestCheckHandler
D/ActivityThread(28740): installProvider: context.getPackageName()=de.rki.coronawarnapp
D/ActivityThread(28740): installProvider: context.getPackageName()=de.rki.coronawarnapp
D/ActivityManager( 679): publishContentProviders: from caller=android.app.ApplicationThreadProxy@a0afa0c (pid=28740)
E/SQLiteLog(28740): (283) recovered 27 frames from WAL file /data/data/de.rki.coronawarnapp/databases/androidx.work.workdb-wal
D/MPEG4Extractor( 179): chunk: styp @ 692874050, 0
D/MPEG4Extractor( 179): chunk: moof @ 692874078, 0
D/MPEG4Extractor( 179): chunk: mfhd @ 692874086, 1
D/OpenSSLLib(28740): OpensslErr:Module:13(114:155); file:external/openssl/crypto/asn1/asn1_lib.c ;Line:145;Function:ASN1_get_object
W/linker (28740): libconscrypt_jni.so: unused DT entry: type 0x6ffffef5 arg 0x1edd8
W/linker (28740): libconscrypt_jni.so: unused DT entry: type 0x6ffffffe arg 0x2c168
W/linker (28740): libconscrypt_jni.so: unused DT entry: type 0x6fffffff arg 0x2
V/NativeCrypto(28740): Registering org/conscrypt/NativeCrypto's 286 native methods...
I/art (28740): Rejecting re-init on previously-failed class java.lang.Class<org.conscrypt.Java7ExtendedSSLSession>
I/art (28740): Rejecting re-init on previously-failed class java.lang.Class<org.conscrypt.Java7ExtendedSSLSession>
I/art (28740): Rejecting re-init on previously-failed class java.lang.Class<org.conscrypt.Java8ExtendedSSLSession>
I/art (28740): Rejecting re-init on previously-failed class java.lang.Class<org.conscrypt.Java8ExtendedSSLSession>
V/ActivityThread(28740): Handling launch of ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}}
V/ActivityThread(28740): ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}}: app=de.rki.coronawarnapp.CoronaWarnApplication@2d268845, appName=de.rki.coronawarnapp, pkg=de.rki.coronawarnapp, comp={de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}, dir=/data/app/de.rki.coronawarnapp-1/base.apk
D/FeatureProxyBase(28740): FeatureProxyBase class constructor
D/FeatureProxyBase(28740): getService(), serviceName = multiwindow_service_v1
I/art (28740): Background sticky concurrent mark sweep GC freed 34440(1419KB) AllocSpace objects, 3(302KB) LOS objects, 10% free, 13MB/14MB, paused 6.850ms total 54.075ms
D/FeatureProxyBase(28740): FeatureProxyBase class constructor
D/FeatureProxyBase(28740): getService(), serviceName = multiwindow_service_v1
D/FeatureProxyBase(28740): FeatureProxyBase class constructor
D/FeatureProxyBase(28740): getService(), serviceName = multiwindow_service_v1
W/art (28740): Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
V/CoronaWarnApplication(28740): App foregrounded
D/AccessibilityManager(28740): setStateLocked: wasEnabled = false, mIsEnabled = false, wasTouchExplorationEnabled = false, mIsTouchExplorationEnabled = false, wasHighTextContrastEnabled = false, mIsHighTextContrastEnabled = false
D/AccessibilityManager(28740): java.lang.Throwable: setStateLocked
D/AccessibilityManager(28740): at android.view.accessibility.AccessibilityManager.setStateLocked(AccessibilityManager.java:553)
D/AccessibilityManager(28740): at android.view.accessibility.AccessibilityManager.tryConnectToServiceLocked(AccessibilityManager.java:636)
D/AccessibilityManager(28740): at android.view.accessibility.AccessibilityManager.<init>(AccessibilityManager.java:226)
D/AccessibilityManager(28740): at android.view.accessibility.AccessibilityManager.getInstance(AccessibilityManager.java:206)
D/AccessibilityManager(28740): at android.view.View.setFlags(View.java:9843)
D/AccessibilityManager(28740): at android.view.ViewGroup.initViewGroup(ViewGroup.java:536)
D/AccessibilityManager(28740): at android.view.ViewGroup.<init>(ViewGroup.java:525)
D/AccessibilityManager(28740): at android.view.ViewGroup.<init>(ViewGroup.java:520)
D/AccessibilityManager(28740): at android.view.ViewGroup.<init>(ViewGroup.java:516)
D/AccessibilityManager(28740): at android.view.ViewGroup.<init>(ViewGroup.java:512)
D/AccessibilityManager(28740): at android.widget.FrameLayout.<init>(FrameLayout.java:119)
D/AccessibilityManager(28740): at com.android.internal.policy.impl.PhoneWindow$DecorView.<init>(PhoneWindow.java:2326)
D/AccessibilityManager(28740): at com.android.internal.policy.impl.PhoneWindow.generateDecor(PhoneWindow.java:3460)
D/AccessibilityManager(28740): at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3846)
D/AccessibilityManager(28740): at com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:2042)
D/AccessibilityManager(28740): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:717)
D/AccessibilityManager(28740): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:659)
D/AccessibilityManager(28740): at androidx.appcompat.app.AppCompatDelegateImpl.onPostCreate(AppCompatDelegateImpl.java:376)
D/AccessibilityManager(28740): at androidx.appcompat.app.AppCompatActivity.onPostCreate(AppCompatActivity.java:118)
D/AccessibilityManager(28740): at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1194)
D/AccessibilityManager(28740): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2497)
D/AccessibilityManager(28740): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601)
D/AccessibilityManager(28740): at android.app.ActivityThread.access$800(ActivityThread.java:178)
D/AccessibilityManager(28740): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
D/AccessibilityManager(28740): at android.os.Handler.dispatchMessage(Handler.java:111)
D/AccessibilityManager(28740): at android.os.Looper.loop(Looper.java:194)
D/AccessibilityManager(28740): at android.app.ActivityThread.main(ActivityThread.java:5637)
D/AccessibilityManager(28740): at java.lang.reflect.Method.invoke(Native Method)
D/AccessibilityManager(28740): at java.lang.reflect.Method.invoke(Method.java:372)
D/AccessibilityManager(28740): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
D/AccessibilityManager(28740): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
I/art (28740): Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
I/art (28740): Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
V/ActivityThread(28740): Performing resume of ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}}
I/art (28740): Background partial concurrent mark sweep GC freed 7909(468KB) AllocSpace objects, 2(541KB) LOS objects, 22% free, 13MB/17MB, paused 10.836ms total 73.570ms
D/ActivityThread(28740): ACT-AM_ON_RESUME_CALLED ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}}
V/ActivityThread(28740): Resume ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}} started activity: false, hideForNow: false, finished: false
V/PhoneWindow(28740): DecorView setVisiblity: visibility = 4 ,Parent =null, this =com.android.internal.policy.impl.PhoneWindow$DecorView{2a251d6d I.E..... R.....I. 0,0-0,0}
I/SurfaceFlinger( 165): EventThread Client Pid (28740) created
I/SurfaceFlinger( 165): EventThread Client Pid (28740) created
D/OpenGLRenderer(28740): initialize DisplayEventReceiver 0xb47ff168
D/OpenGLRenderer(28740): Use EGL_SWAP_BEHAVIOR_PRESERVED: false
D/GraphicBuffer(28740): register, handle(0xa1c10ca0) (w:1280 h:1600 s:1280 f:0x1 u:0x000100)
D/Atlas (28740): Validating map...
I/okhttp.OkHttpClient(28740): --> GET https://svc90.main.px.t-online.de/version/v1/configuration/country/DE/app_config
I/okhttp.OkHttpClient(28740): --> END GET
D/ViewRootImpl(28740): hardware acceleration is enabled, this = ViewRoot{390aa035 de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity,ident = 0}
V/ActivityThread(28740): Resuming ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}} with isForward=true
D/FeatureProxyBase(28740): FeatureProxyBase class constructor
D/FeatureProxyBase(28740): getService(), serviceName = multiwindow_service_v1
V/PhoneWindow(28740): DecorView setVisiblity: visibility = 0 ,Parent =ViewRoot{390aa035 de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity,ident = 0}, this =com.android.internal.policy.impl.PhoneWindow$DecorView{2a251d6d V.E..... R.....I. 0,0-0,0}
V/ActivityThread(28740): Scheduling idle handler for ActivityRecord{214b3b9a token=android.os.BinderProxy@c4d7ccb {de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity}}
I/System.out(28740): [CDS][DNS] getAllByNameImpl netId = 0
D/libc-netbsd(28740): [getaddrinfo]: hostname=svc90.main.px.t-online.de; servname=(null); cache_mode=(null), netid=0; mark=0
D/libc-netbsd(28740): [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
D/libc-netbsd(28740): [getaddrinfo]: hostname=svc90.main.px.t-online.de; servname=(null); cache_mode=(null), netid=0; mark=0
D/libc-netbsd(28740): [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=1024; ai_family=0
D/OpenGLRenderer(28740): CanvasContext() 0xb44971c0 initialize 0xb45cde08
E/[DRVB][EXT][UTIL](28740): disp_only_chk: DRVB CHECK DISP PROCESS DONE ! (2/0x47/0x48/0x46)
E/[DRVB][EXT][UTIL](28740): disp_only_chk: DRVB CHECK DISP PROCESS DONE ! (720/0/1)
E/[DRVB][EXT][UTIL](28740): disp_only_chk: DRVB CHECK0 PROCESS DONE ! STATUS (0x2000)
W/[DRVB] (28740): sec_drv_base_check: DRVB PROCESS STATUS = 0x2000
V/InputMethodManager(28740): onWindowFocus: null softInputMode=288 first=true flags=#81812100
V/InputMethodManager(28740): START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{2a251d6d V.E..... R.....ID 0,0-720,1280} ic=null tba=android.view.inputmethod.EditorInfo@2cd20ab1 controlFlags=#104
I/OpenGLRenderer(28740): Initialized EGL, version 1.4
I/OpenGLRenderer(28740): Get enable program binary service property (1)
I/OpenGLRenderer(28740): Initializing program atlas...
D/ProgramBinary/Service(28740): BpProgramBinaryService.getFileDescriptor
D/ProgramBinary/Service(28740): BpProgramBinaryService.getProgramMapLen
D/ProgramBinary/Service(28740): BpProgramBinaryService.getProgramMapArray
D/ProgramBinary/Service(28740): BpProgramBinaryService.getProgramBinaryLen
I/OpenGLRenderer(28740): Program binary detail: Binary length is 90540, program map length is 112.
I/OpenGLRenderer(28740): No need to use file discriptor anymore, close fd(48).
D/OpenGLRenderer(28740): TaskManager() 0xb45bbde0, cpu = 4, thread = 2
D/OpenGLRenderer(28740): Enabling debug mode 0
I/[MALI][Gralloc](28740): dlopen libsec_mem.so fail
D/Surface (28740): Surface::connect(this=0xb45cde00,api=1)
I/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) connect(P): api=1 producer=(28740:de.rki.coronawarnapp) producerControlledByApp=true
I/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) new GraphicBuffer needed
D/GraphicBuffer(28740): register, handle(0xa1c10fa0) (w:720 h:1280 s:720 f:0x1 u:0x000f02)
D/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) cancelBuffer: slot 0
I/MaliEGL (28740): [Mali]window_type=1, is_framebuffer=0, errnum = 0
I/MaliEGL (28740): [Mali]surface->num_buffers=4, surface->num_frames=3, win_min_undequeued=1
I/MaliEGL (28740): [Mali]max_allowed_dequeued_buffers=3
D/Surface (28740): Surface::setBufferCount(this=0xb45cde00,bufferCount=4)
I/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) setBufferCount: count = 4
I/BufferQueueConsumer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) getReleasedBuffers: returning mask 0xffffffffffffffff
D/GraphicBuffer(28740): unregister, handle(0xa1c10fa0) (w:720 h:1280 s:720 f:0x1 u:0x000f02)
I/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) new GraphicBuffer needed
D/GraphicBuffer(28740): register, handle(0xa1c10fa0) (w:720 h:1280 s:720 f:0x1 u:0x000f02)
D/Surface (28740): Surface::allocateBuffers(this=0xb45cde00)
D/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) allocateBuffers: allocating from 1 buffers up to 4 buffers
D/BufferQueueProducer( 165): [de.rki.coronawarnapp/de.rki.coronawarnapp.ui.LauncherActivity](this:0xb5c54400,id:11471,api:1,p:28740,c:165) allocateBuffers: allocating from 4 buffers up to 4 buffers
D/libc-netbsd(28740): getaddrinfo: svc90.main.px.t-online.de get result from proxy >>
I/System.out(28740): propertyValue:true
I/System.out(28740): [CDS]rx timeout:10000
I/System.out(28740): [socket][0] connection svc90.main.px.t-online.de/87.140.208.153:443;LocalPort=44658(10000)
I/System.out(28740): [CDS]connect[svc90.main.px.t-online.de/87.140.208.153:443] tm:10
D/Posix (28740): [Posix_connect Debug]Process de.rki.coronawarnapp :443
I/System.out(28740): [socket][/100.74.179.237:44658] connected
I/System.out(28740): [CDS]rx timeout:10000
I/okhttp.OkHttpClient(28740): <-- 200 OK https://svc90.main.px.t-online.de/version/v1/configuration/country/DE/app_config (1325ms)
I/okhttp.OkHttpClient(28740): Server: nginx
I/okhttp.OkHttpClient(28740): Date: Tue, 16 Jun 2020 12:24:15 GMT
I/okhttp.OkHttpClient(28740): Content-Type: application/octet-stream
I/okhttp.OkHttpClient(28740): Content-Length: 557
I/okhttp.OkHttpClient(28740): Connection: keep-alive
I/okhttp.OkHttpClient(28740): ETag: "e881f7ed16a56975ca1feca6534ac45a"
I/okhttp.OkHttpClient(28740): Last-Modified: Mon, 15 Jun 2020 17:18:17 GMT
I/okhttp.OkHttpClient(28740): Cache-Control: public,max-age=300
I/okhttp.OkHttpClient(28740): x-amz-meta-cwa-hash: b70a04b564e2374eabf6042b4cb24a01
I/okhttp.OkHttpClient(28740): Content-Security-Policy: default-src 'self' *.coronawarn.app; img-src 'self' *.coronawarn.app data:
I/okhttp.OkHttpClient(28740): X-Content-Type-Options: nosniff
I/okhttp.OkHttpClient(28740): X-Frame-Options: DENY
I/okhttp.OkHttpClient(28740): X-XSS-Protection: 1
I/okhttp.OkHttpClient(28740): Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
I/okhttp.OkHttpClient(28740): Accept-Ranges: bytes
I/okhttp.OkHttpClient(28740): <-- END HTTP (binary 557-byte body omitted)
V/ZipHelper(28740): read zip entry export.sig
V/ZipHelper(28740): read zip entry export.bin
E/AndroidRuntime(28740): FATAL EXCEPTION: main
E/AndroidRuntime(28740): Process: de.rki.coronawarnapp, PID: 28740
E/AndroidRuntime(28740): java.lang.NoClassDefFoundError: Failed resolution of: Landroid/security/keystore/KeyGenParameterSpec$Builder;
E/AndroidRuntime(28740): at androidx.security.crypto.MasterKeys.createAES256GCMKeyGenParameterSpec(MasterKeys.java:72)
E/AndroidRuntime(28740): at androidx.security.crypto.MasterKeys.<clinit>(MasterKeys.java:55)
E/AndroidRuntime(28740): at de.rki.coronawarnapp.util.security.SecurityHelper.<clinit>(SecurityHelper.kt:43)
E/AndroidRuntime(28740): at de.rki.coronawarnapp.util.security.VerificationKeys.hasInvalidSignature(VerificationKeys.kt:24)
E/AndroidRuntime(28740): at de.rki.coronawarnapp.http.WebRequestBuilder$asyncGetApplicationConfigurationFromServer$2.invokeSuspend(WebRequestBuilder.kt:126)
E/AndroidRuntime(28740): at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E/AndroidRuntime(28740): at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
E/AndroidRuntime(28740): at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
E/AndroidRuntime(28740): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
E/AndroidRuntime(28740): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
E/AndroidRuntime(28740): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
E/AndroidRuntime(28740): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.security.keystore.KeyGenParameterSpec$Builder" on path: DexPathList[[zip file "/data/app/de.rki.coronawarnapp-1/base.apk"],nativeLibraryDirectories=[/data/app/de.rki.coronawarnapp-1/lib/arm, /vendor/lib, /system/lib]]
E/AndroidRuntime(28740): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime(28740): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(28740): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/AndroidRuntime(28740): ... 11 more
E/AndroidRuntime(28740): Suppressed: java.lang.ClassNotFoundException: android.security.keystore.KeyGenParameterSpec$Builder
E/AndroidRuntime(28740): at java.lang.Class.classForName(Native Method)
E/AndroidRuntime(28740): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/AndroidRuntime(28740): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/AndroidRuntime(28740): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/AndroidRuntime(28740): ... 12 more
E/AndroidRuntime(28740): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
D/MPEG4Extractor( 179): chunk: trun @ 203228740, 2
D/AES ( 679): pid : 28740
D/AEE/LIBAEE( 679): shell: raise_exp(4, 28740, -1361051648, de.rki.coronawarnapp, 0x0x9ebdc000, 0x0x0)
I/AEE/AED (28778): [OnPurpose Redunant in void preset_info(aed_report_record*, int, int)] pid: 28740, tid: -1361051648, name: UNKNOWN >>> de.rki.coronawarnapp <<<
I/Process (28740): Sending signal. PID: 28740 SIG: 9
D/DisplayManagerService( 679): Display listener for pid 28740 died.
I/SurfaceFlinger( 165): EventThread Client Pid (28740) disconnected by (165)
I/SurfaceFlinger( 165): EventThread Client Pid (28740) disconnected by (165)
W/ADB_SERVICES(22522): terminating JDWP 28740 connection: Try again
D/ADB_SERVICES(22522): remove pid 28740 to jdwp process list
I/ActivityManager( 679): Process de.rki.coronawarnapp (pid 28740) has died
D/ActivityManager( 679): SVC-handleAppDiedLocked: app = ProcessRecord{356f533 28740:de.rki.coronawarnapp/u0a158}, app.pid = 28740
D/ActivityManager( 679): cleanUpApplicationRecord -- 28740
Issue Analytics
- State:
- Created 3 years ago
- Comments:5 (1 by maintainers)
I guess the Exposure Notifications API documentation has been updated recently:
Maybe the minSdk version should be reconsidered?
@harambasicluka Thanks for the quick feedback. It seems, there are questions about this requirement: https://github.com/google/exposure-notifications-android/issues/16
The code itself declares version 21 as the minimum: https://github.com/google/exposure-notifications-android/blob/master/app/build.gradle#L35
Could we please, if nothing else, keep this open? I don’t think the last word is spoken on this one.