I'm very happy to release B4A v8.0. This update includes many important improvements and makes it simpler to target the latest versions of Android.
(image source: android.com)
As explained in this tutorial, all apps will soon need to target sdk version 26 (Android 8). This is a new policy of Google and it has many consequences for app developers. Many of the improvements in B4A v8.0 help developers with this task.
Improvements:
Backward compatibility notes
Developers eligible for a free upgrade should receive an email with upgrade instructions. Other developers will receive a renewal offer.
(image source: android.com)
As explained in this tutorial, all apps will soon need to target sdk version 26 (Android 8). This is a new policy of Google and it has many consequences for app developers. Many of the improvements in B4A v8.0 help developers with this task.
Improvements:
- The process of starting the app from the background was rewritten to comply with targetSdkVersion 26 requirements.
- Push notifications and other features that cause apps to start from the background should be more reliable due to changes in the way services are started. A wake lock is automatically held when a receiver receives an intent. The wake lock is released when the service starts.
- Automatic foreground mode: https://www.b4x.com/android/forum/threads/automatic-foreground-mode.90546/
- Notification object rewritten to work with targetSdkVersion 26. In most cases you don't need to change anything. Notification.SetInfo or Notification.SetInfo2 should be the last calls before you show the notification.
- Notification.SetInfo / SetInfo2 accept CharSequences so it can work with CSBuilder.
- StartServiceAt / StartServiceAtExact rewritten to work with targetSdkVersion 26 and they are now more reliable.
- Notification.Initialize2 - Allows to set the notification channel importance level.
- Better support for AAR libraries: jni folders (native libraries) are handled properly, assets and resources from internal jars are added to the project.
- #AdditionalJar with ReferenceOnly - Allows referencing jars that are only used as a reference during compilation. This is required for more complex libraries such as DJI library.
- Signing key size is explicitly set to avoid issues with newer versions of Java.
- B4A Sdk Manager v3.25 - Bug fixes and support for Google based AVDs.
- Screenshot tool modified to work with latest versions of Android SDK.
- MediaPlayer.IsInitialzied method.
- Manifest editor macros - Macros can be added to libraries or zip files. For example to set a light theme based on Android version:
B4X:CreateResourceFromFile(Macro, Themes.LightTheme)
Firebase push notifications:
B4X:CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase) CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase) CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)
- Custom class templates - Class templates can be added to libraries.
For example if you add the XUI library to your project then you will have an option to add a custom view based on XUI:
Libraries can include multiple templates and any library can include templates.
- #SignKeyAlias attribute - Allows overriding the default signing key alias.
- Firebase, xCustomListView and KeyValueStore (2) are internal libraries.
- Libraries deprecation messages in the IDE:
- Fix for a very long standing issue where the activity code could have been executed while the activity is paused which leads to a hard to reproduce NullPointerException.
- BADoclet (tool to generate libraries XML) v1.07 - adds support for custom class templates.
- Other bug fixes and minor improvements.
Backward compatibility notes
- Notification.SetInfo or SetInfo2 should be the last calls before you use the notification. Note that standard notifications created with previous versions of B4A will not work at all on Android 8+ when targetSdkVersion is 26+.
- Adding a service, other than the Starter service, will add the WAKE_LOCK permission. This is a non-dangerous permission.
As mentioned above a wake lock is held automatically when a service is started from the background and until Service_Start is called. You can remove this permission with:
B4X:RemovePermission(android.permission.WAKE_LOCK)
Developers eligible for a free upgrade should receive an email with upgrade instructions. Other developers will receive a renewal offer.