Android Question Resurrection of old kiosk app

bdunkleysmith

Active Member
Licensed User
Longtime User
In 2018 I created a kiosk app based on this concept https://www.b4x.com/android/forum/threads/device-owner-tasklock-kiosk-apps-2017.81765/ which was a consolidated TV & Foxtel (cable TV) remote control for my late father who had lost the dexterity to use his normal remote controls. This was the UI:



With the passing of my father, I repurposed the Samsung tablet, but now another member of my family is in the same position and I want to reinstall my kiosk app on the same tablet for them to use.

However, the app will no longer compile, so I suspect an incompatibility issue given 8 years have passed. Yes, I'm still running B4A version 12.80 and here is the error:

B4X:
B4A Version: 12.80
Parsing code.    (0.00s)
    Java Version: 19
Building folders structure.    (0.00s)
Compiling code.    (0.01s)
Compiling layouts code.    (0.00s)
Organizing libraries.    (0.00s)
    (AndroidX SDK)
Compiling resources    (0.03s)
Linking resources    (0.20s)
Compiling generated Java code.    Error
An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
    at androidx.lifecycle.LifecycleProcessor.getSupportedSourceVersion(LifecycleProcessor.kt:37)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.checkSourceVersionCompatibility(JavacProcessingEnvironment.java:758)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:698)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:823)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:919)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1262)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1377)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1234)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:916)
    at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:317)
    at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:176)
    at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:64)
    at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:50)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 13 more

javac 19.0.2

The Samsung tablet is running Android 5.1.1, which I assume is what it was when the app previously functioned and can't probably be updated anyway, although I see in my code I have:

B4X:
    #AdditionalJar: com.android.support:support-v4

and so I don't know if I had it running on Android 4 at some stage.

Here is the manifest, noting the lines applicable to making it a kiosk app are commented out, but I don't think that's relevant to the error:

B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: http://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="26"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
'End of default text.
AddPermission(android.permission.ACCESS_COARSE_LOCATION)
'Content to make into kiosk app
'AddApplicationText(<receiver android:name="anywheresoftware.b4a.objects.AdminReceiver2"
'  android:permission="android.permission.BIND_DEVICE_ADMIN">
'  <meta-data android:name="android.app.device_admin"
'  android:resource="@xml/device_admin" />
'  <intent-filter>
'  <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
'  </intent-filter>
'</receiver>)
'CreateResource(xml, device_admin.xml,
'<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
'  <uses-policies>
'  <limit-password />
'  <reset-password />
'  <force-lock />
'  </uses-policies>
'</device-admin>
')
'Make a home launcher activity
'AddActivityText(Main,
'<intent-filter>
'  <action android:name="android.intent.action.MAIN" />
'  <category android:name="android.intent.category.HOME" />
'  <category android:name="android.intent.category.DEFAULT" />
'</intent-filter>
')
'********* TabStrip ***********************
CreateResource(drawable, background_tab.xml,
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:exitFadeDuration="@android:integer/config_shortAnimTime">
    <item android:state_pressed="true" android:drawable="@color/background_tab_pressed" />
    <item android:state_focused="true" android:drawable="@color/background_tab_pressed"/>
    <item android:drawable="@android:color/transparent"/>
</selector>)
CreateResource(values, colors.xml,
<resources>
    <color name="background_tab_pressed">#6633B5E5</color>
</resources>)
'******************************************

I understand this post hasn't provided any details of my app code, but I'm wondering if the above error and manifest information may enable someone to suggest a possible fix so I can resurrect this app which proved very useful to an incapacitated person previously.

But I fear the Android ecosystem may have moved on and what worked back in 2018 may not be acceptable in 2026!
 

aeric

Expert
Licensed User
Longtime User
B4A Version: 12.80
Parsing code. (0.00s)
Java Version: 19
If you use older B4A, try older JDK such as JDK 14.
If you use JDK19, better upgrade to latest version of B4A.
 
Upvote 0
Solution

bdunkleysmith

Active Member
Licensed User
Longtime User
Thanks @aeric. I've been cautious updating B4A because the few Android apps I've developed run on older devices and I worry abut backward compatibility, but trying some earlier JDK versions still threw errors.

So I've updated to B4A 13.4 and the app complies OK, but I'm yet to try kiosk mode, however I'll mark this as solved for the moment on the assumption that will be OK.
 
Upvote 0

aeric

Expert
Licensed User
Longtime User
I think targetSdkVersion=26 should be ok for older version of Android.
 
Upvote 0
Cookies are required to use this site. You must accept them to continue using the site. Learn more…