dji-sdk / Mobile-SDK-Android

DJI Mobile SDK for Android: http://developer.dji.com/mobile-sdk/
Other
996 stars 581 forks source link

Any plan to support Android 14 with targetSdk = 34 #1315

Open huongta157 opened 4 months ago

huongta157 commented 4 months ago

Screenshot 2024-07-05 at 08 36 42 Does your team have any plan to support Android 14 with targetSdk = 34?

Note: Currently I using target Sdk = 33 so my app work normal

Thank team so much! I hope to receive answer from your team early.

dji-dev commented 4 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

I have not received a plan to adapt to Android 14 yet. I will inform the team about this information. Thank you for your feedback.

°°°

huongta157 commented 4 months ago

@dji-dev Please inform me if have any update for this Thank you so much!

brien-crean commented 4 months ago

@dji-dev we would also really appreciate if SDK 4 could be updated to target Android 14 (API level 34), otherwise we will not be able to provide updates to our app after August 31st 2024. Thank you

dji-dev commented 4 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

I will convey your strong feedback to the team.

°°°

Simon-Richards commented 4 months ago

@dji-dev I would also like to make this request as we have an app using your SDK. When we target API level 34, the app crashes with exception:

java.lang.SecurityException: my.package.com: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts at android.os.Parcel.createExceptionOrNull(Parcel.java:3069) at android.os.Parcel.createException(Parcel.java:3053) at android.os.Parcel.readException(Parcel.java:3036) at android.os.Parcel.readException(Parcel.java:2978) at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:6157) at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1913) at android.app.ContextImpl.registerReceiver(ContextImpl.java:1853) at android.app.ContextImpl.registerReceiver(ContextImpl.java:1841) at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:772) at dji.sdk.sdkmanager.DJISDKManager.registerProductAccessManager(Unknown Source:36) at dji.sdk.sdkmanager.DJISDKManager.initParams(Unknown Source:196) at dji.sdk.sdkmanager.DJISDKManager.initSDKManager(Unknown Source:12) at dji.sdk.sdkmanager.DJISDKManager.registerApp(Unknown Source:37) at dji.sdk.sdkmanager.DJISDKManager.access$1300(Unknown Source:0) at dji.sdk.sdkmanager.DJISDKManager$8.onDownloadSuccess(Unknown Source:6) at dji.internal.flysafe.fdd.fdd(Unknown Source:19) at dji.sdk.sdkmanager.DJISDKManager.lambda$registerApp$2(Unknown Source:27) at dji.sdk.sdkmanager.DJISDKManager$$Lambda$5.run(Unknown Source:2) at dji.sdksharedlib.util.dgh$fdd.run(Unknown Source:5)

Thanks!

dji-dev commented 4 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

The current released MSDK version does not support Android 14. The crashes you are experiencing are also due to this.

°°°

dscottbot commented 4 months ago

The linked Zendesk ticket isnt working for me. Can anyone explain what that was about? Or has there been any updates? August 31st is sooner than you think... Please DJI.

and we get it, "work expands to fill the time available for its completion", but the rest of us need your work done so we can get our work done before the 31st.

dji-dev commented 4 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

Google offers the option to extend, you can apply for it until November. The plans we currently understand may not be completed by August 31st.
image.png

°°°

huongta157 commented 3 months ago

@dji-dev The plan is in progress, right?

dji-lyt commented 3 months ago

Apart from the requirements from the Google Store, do you have any other expectations for Android 14? For example, new features in Android 14? I would like to understand if failing to release the compatible version by August 31st would be a blocking issue. If so, could you please explain why?@huongta157 @Simon-Richards @brien-crean

At this moment, I cannot confirm if a version compatible with Android 14 will be released before August 31st, as the development time is too short. If the app has already been released, you can try applying for an extension with Google.

huongta157 commented 3 months ago

@dji-lyt Thank you for your feedback.

dji-dev commented 3 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

Could you let us know what you can achieve with targetSdk = 34? Or what value it brings to you?

°°°

brien-crean commented 3 months ago

@dji-dev @dji-lyt The value it brings is the ability to continue to distribute our app via Google Play. If DJI SDK 4 does not support targetSdk = 34 then we would have to find some other means of distributing our app which is extremely inconvenient and reduces our apps visibility.

We have already been granted an extension up until November 1st, but beyond that our app will be removed from the Play store if this SDK is not updated to support targetSdk = 34.

Will it be possible for SDK 4 to support targetSdk = 34 before November 1st?

dji-dev commented 3 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

I will relay the information you provided to our team. However, I have not yet received an estimated timeline. The plan is to adapt to Android 14 in the next version.

°°°

lachlanwp commented 2 months ago

I have the same problem, however the last update I published to my app on the Google Play store included targetSdk=34 so now I'm stuck with an app deployed that crashes on newer phones with no option to downgrade. This happened because I only tested my app on an older Android device.

I thought perhaps I could fork this repo and make the necessary changes however I find that this repo doesn't contain the source code 👎

I'm pretty upset all-round. If the new v5 DJI SDK supported all the drones, then I would have migrated to it by now - however this isn't the case. It's a pretty minor change to make it work, just call registerReceiver differently depending on the Android SDK version like below:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    registerReceiver(mReceiver, filter, RECEIVER_NOT_EXPORTED);
}else {
    registerReceiver(mReceiver, filter);
}

It's crashing at dji.midware.usb.P3.UsbAccessoryService.registerAoaReceiver. Here's the full stack trace:

java.lang.SecurityException: com.abc.xyz One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
        at android.os.Parcel.createExceptionOrNull(Parcel.java:3069)
        at android.os.Parcel.createException(Parcel.java:3053)
        at android.os.Parcel.readException(Parcel.java:3036)
        at android.os.Parcel.readException(Parcel.java:2978)
        at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:6157)
        at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1913)
        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1853)
        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1841)
        at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:772)
        at dji.midware.usb.P3.UsbAccessoryService.registerAoaReceiver(Unknown:75)
        at dji.midware.dgh.fdd(Unknown:42)
        at dji.sdksharedlib.fdd.fdd(Unknown:6)
        at dji.sdk.sdkmanager.DJISDKManager.initParams(Unknown:15)
        at dji.sdk.sdkmanager.DJISDKManager.initSDKManager(Unknown:12)
        at dji.sdk.sdkmanager.DJISDKManager.registerApp(Unknown:37)
        at dji.sdk.sdkmanager.DJISDKManager.access$1100(Unknown)
        at dji.sdk.sdkmanager.DJISDKManager$8$1.onDownloadSuccess(Unknown:8)
        at dji.internal.jhg.fdd.fdd(Unknown:19)
        at dji.sdk.sdkmanager.DJISDKManager$8.run(Unknown:37)
        at dji.sdksharedlib.dgh.gfd$fdd.run(Unknown:5)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
        at java.lang.Thread.run(Thread.java:1012)

I hope it's fixed soon, there's definitely demand for it!

dji-lyt commented 2 months ago

@lachlanwp We will address the crashes you are experiencing in the version compatible with Android 14. We do not recommend configuring targetSDKversion=34 in the current version, so the latest version is only compatible with Android 13.

mitchrsm commented 2 months ago

same problem here, glad to see DJI team on it, please keep us posted for any update, thanks

dji-dev commented 2 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

Of course, I will update the compatibility status of Android 14 here.

°°°

ngocanhbui1411 commented 2 months ago

Hi, my app meets the same problem, every phones with android 14 are crash when we update our app to API 34, (my app is user MSDK4). Please let me know when your team is update MSDK 4 that compatible to android 14, hoping it will be soon because 1/11, all app needs to up to date API 34.

dji-dev commented 2 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

I am currently unable to provide an exact timeline, but we will have a version compatible with Android 14 before November.

°°°

dji-dev commented 2 months ago

Agent comment from yating.liao in Zendesk ticket #111263:

The MSDK V5 has just released a test version compatible with Android 14. The MSDK V4 will also have a version compatible with Android 14 released in the future. https://github.com/dji-sdk/Mobile-SDK-Android-V5/tree/dev-sdk-alpha

°°°

geeksilva97 commented 1 month ago

It also crashes at dji.sdk.sdkmanager.DJISDKManager.registerProductAccessManager

dji-lyt commented 1 month ago

The test version compatible with Android 14 has been released:https://github.com/dji-sdk/Mobile-SDK-Android/tree/sdk_releases/4.18-alpha @brien-crean @geeksilva97 @mitchrsm @lachlanwp

geeksilva97 commented 1 month ago

The test version compatible with Android 14 has been released:https://github.com/dji-sdk/Mobile-SDK-Android/tree/sdk_releases/4.18-alpha @brien-crean @geeksilva97 @mitchrsm @lachlanwp

quick question. READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE are now deprecated. Shouldn't these two be replaced with other permissions in Sample code?

From my tests no Android 14 both will always be denied.

dji-dev commented 1 month ago

Agent comment from yating.liao in Zendesk ticket #111263:

The sample code is not exclusively for Android 14; for instance, the system version of the DJI RM500 remote controller is still 7 or 6.

Are you experiencing any issues when running the sample code on Android 14?

°°°

lachlanwp commented 1 month ago

The test version compatible with Android 14 has been released:https://github.com/dji-sdk/Mobile-SDK-Android/tree/sdk_releases/4.18-alpha @brien-crean @geeksilva97 @mitchrsm @lachlanwp

quick question. READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE are now deprecated. Shouldn't these two be replaced with other permissions in Sample code?

From my tests no Android 14 both will always be denied.

@geeksilva97, I had similar issues and I tracked back via parent commits to work it out. I think you need to keep the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE in the AndroidManifest.xml, however in the sample code they updated it to be conditional based on Android O.S. version like this:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            permissionArrays = new String[]{
                    Manifest.permission.VIBRATE, // Gimbal rotation
                    Manifest.permission.INTERNET, // API requests
                    Manifest.permission.ACCESS_WIFI_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_COARSE_LOCATION, // Maps
                    Manifest.permission.ACCESS_NETWORK_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_FINE_LOCATION, // Maps
                    Manifest.permission.CHANGE_WIFI_STATE, // Changing between WIFI and USB connection
                    Manifest.permission.BLUETOOTH, // Bluetooth connected products
                    Manifest.permission.BLUETOOTH_ADMIN, // Bluetooth connected products
                    Manifest.permission.READ_PHONE_STATE, // Device UUID accessed upon registration
                    Manifest.permission.RECORD_AUDIO,// Speaker accessory
            };
        } else {//兼容Android 12
            permissionArrays = new String[]{
                    Manifest.permission.VIBRATE, // Gimbal rotation
                    Manifest.permission.INTERNET, // API requests
                    Manifest.permission.ACCESS_WIFI_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_COARSE_LOCATION, // Maps
                    Manifest.permission.ACCESS_NETWORK_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_FINE_LOCATION, // Maps
                    Manifest.permission.CHANGE_WIFI_STATE, // Changing between WIFI and USB connection
                    Manifest.permission.WRITE_EXTERNAL_STORAGE, // Log files
                    Manifest.permission.BLUETOOTH, // Bluetooth connected products
                    Manifest.permission.BLUETOOTH_ADMIN, // Bluetooth connected products
                    Manifest.permission.READ_EXTERNAL_STORAGE, // Log files
                    Manifest.permission.READ_PHONE_STATE, // Device UUID accessed upon registration
                    Manifest.permission.RECORD_AUDIO // Speaker accessory
            };
        }

Here's the source: https://github.com/dji-sdk/Mobile-SDK-Android/commit/2a142f2d333eb65bdb923a225432813e2c93c709 See file Sample Code/app/src/main/java/com/dji/sdk/sample/internal/view/MainContent.java

lachlanwp commented 1 month ago

@dji-dev @dji-lyt I've nearly got it running, however I noticed that somewhere along the updates this was changed:

From this:

...
com.secneo.sdk.Helper.install(MApplication.this);
...

To this:

...
com.cySdkyc.clx.Helper.install(MApplication.this);
...

And the proguard-rules.pro was changed

From this:

...
-keep class com.secneo.** { *; }
...

To this:

...
-keep class com.cySdkyc.** { *; }
...

I tried to update my source, however my app fails as below:

No implementation found for void com.cySdkyc.clx.Helper.i() (tried Java_com_cySdkyc_clx_Helper_i and Java_com_cySdkyc_clx_Helper_i__) - is the library loaded, e.g. System.loadLibrary?

and it won't let me connect to the aircraft so I can go to fly mode.

It's also noted in the official docs here: https://developer-dji-com.translate.goog/doc/mobile-sdk-tutorial/cn/?_x_tr_sl=zh-CN&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=sc

Any help would be greatly appreciated and it might help other folks who are also upgrading.

geeksilva97 commented 1 month ago

Oh, I could handle it. I'm projecting more ppl facing the same thing and not knowing exactly what to do till the search a lot and fall here.

@dji-dev I know the sample is not exclusively for Android 14. But Sample Code should work on Android 14 too.

geeksilva97 commented 1 month ago

@dji-dev any clue for when we have dji-uxsdk too? I'm getting the following error

2: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:mergeReleaseNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeNativeLibsTask$MergeNativeLibsTaskWorkAction
   > 2 files found with path 'lib/arm64-v8a/libDJICSDKCommon.so' from inputs:
      - /Users/edysilva/.gradle/caches/transforms-3/73ea942cea79d1fa099fdc8f34cc965c/transformed/jetified-dji-sdk-alpha-4.18-a1/jni/arm64-v8a/libDJICSDKCommon.so
      - /Users/edysilva/.gradle/caches/transforms-3/004070d3edf6633274c45e074e8956cf/transformed/jetified-dji-sdk-4.16.2/jni/arm64-v8a/libDJICSDKCommon.so
     If you are using jniLibs and CMake IMPORTED targets, see
     https://developer.android.com/r/tools/jniLibs-vs-imported-targets

app/build.gradle

    implementation ('com.dji:dji-uxsdk:4.16.2', {
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        //exclude module: 'library-anti-distortion'
        exclude module: 'fly-safe-database'
        exclude group: 'com.mapbox.mapboxsdk' // this dependency is no longer needed
        exclude group: 'com.amap.api' //because of problems with GOOGLE PLAY
    })

    implementation ('com.dji:dji-sdk-alpha:4.18-a1',{
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        //exclude module: 'library-anti-distortion'
        exclude module: 'fly-safe-database'
        exclude group: 'com.amap.api' //because of problems with GOOGLE PLAY
    })
    compileOnly ('com.dji:dji-sdk-provided-alpha:4.18-a1')

Looks like dependencies from dji-uxsdk are conflicting with dji-sdk-alpha.

This was not happening with version 'com.dji:dji-sdk:4.17

dji-lyt commented 1 month ago

The test version compatible with Android 14 has been released:https://github.com/dji-sdk/Mobile-SDK-Android/tree/sdk_releases/4.18-alpha @brien-crean @geeksilva97 @mitchrsm @lachlanwp

quick question. READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE are now deprecated. Shouldn't these two be replaced with other permissions in Sample code? From my tests no Android 14 both will always be denied.

@geeksilva97, I had similar issues and I tracked back via parent commits to work it out. I think you need to keep the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE in the AndroidManifest.xml, however in the sample code they updated it to be conditional based on Android O.S. version like this:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            permissionArrays = new String[]{
                    Manifest.permission.VIBRATE, // Gimbal rotation
                    Manifest.permission.INTERNET, // API requests
                    Manifest.permission.ACCESS_WIFI_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_COARSE_LOCATION, // Maps
                    Manifest.permission.ACCESS_NETWORK_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_FINE_LOCATION, // Maps
                    Manifest.permission.CHANGE_WIFI_STATE, // Changing between WIFI and USB connection
                    Manifest.permission.BLUETOOTH, // Bluetooth connected products
                    Manifest.permission.BLUETOOTH_ADMIN, // Bluetooth connected products
                    Manifest.permission.READ_PHONE_STATE, // Device UUID accessed upon registration
                    Manifest.permission.RECORD_AUDIO,// Speaker accessory
            };
        } else {//兼容Android 12
            permissionArrays = new String[]{
                    Manifest.permission.VIBRATE, // Gimbal rotation
                    Manifest.permission.INTERNET, // API requests
                    Manifest.permission.ACCESS_WIFI_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_COARSE_LOCATION, // Maps
                    Manifest.permission.ACCESS_NETWORK_STATE, // WIFI connected products
                    Manifest.permission.ACCESS_FINE_LOCATION, // Maps
                    Manifest.permission.CHANGE_WIFI_STATE, // Changing between WIFI and USB connection
                    Manifest.permission.WRITE_EXTERNAL_STORAGE, // Log files
                    Manifest.permission.BLUETOOTH, // Bluetooth connected products
                    Manifest.permission.BLUETOOTH_ADMIN, // Bluetooth connected products
                    Manifest.permission.READ_EXTERNAL_STORAGE, // Log files
                    Manifest.permission.READ_PHONE_STATE, // Device UUID accessed upon registration
                    Manifest.permission.RECORD_AUDIO // Speaker accessory
            };
        }

Here's the source: 2a142f2 See file Sample Code/app/src/main/java/com/dji/sdk/sample/internal/view/MainContent.java

Thank you for your suggestion. I will forward it to the team.

dji-lyt commented 1 month ago

@dji-dev any clue for when we have dji-uxsdk too? I'm getting the following error

2: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:mergeReleaseNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeNativeLibsTask$MergeNativeLibsTaskWorkAction
   > 2 files found with path 'lib/arm64-v8a/libDJICSDKCommon.so' from inputs:
      - /Users/edysilva/.gradle/caches/transforms-3/73ea942cea79d1fa099fdc8f34cc965c/transformed/jetified-dji-sdk-alpha-4.18-a1/jni/arm64-v8a/libDJICSDKCommon.so
      - /Users/edysilva/.gradle/caches/transforms-3/004070d3edf6633274c45e074e8956cf/transformed/jetified-dji-sdk-4.16.2/jni/arm64-v8a/libDJICSDKCommon.so
     If you are using jniLibs and CMake IMPORTED targets, see
     https://developer.android.com/r/tools/jniLibs-vs-imported-targets

app/build.gradle

    implementation ('com.dji:dji-uxsdk:4.16.2', {
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        //exclude module: 'library-anti-distortion'
        exclude module: 'fly-safe-database'
        exclude group: 'com.mapbox.mapboxsdk' // this dependency is no longer needed
        exclude group: 'com.amap.api' //because of problems with GOOGLE PLAY
    })

    implementation ('com.dji:dji-sdk-alpha:4.18-a1',{
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        //exclude module: 'library-anti-distortion'
        exclude module: 'fly-safe-database'
        exclude group: 'com.amap.api' //because of problems with GOOGLE PLAY
    })
    compileOnly ('com.dji:dji-sdk-provided-alpha:4.18-a1')

Looks like dependencies from dji-uxsdk are conflicting with dji-sdk-alpha.

This was not happening with version 'com.dji:dji-sdk:4.17

The UXSDK currently does not have an update plan. You may try replacing the MSDK module in the UXSDK with the latest alpha version. Like this:https://sdk-forum.dji.net/hc/en-us/articles/5318331701657-How-to-solve-the-MSDK-and-UXSDK-version-inconsistency-problem

mitchrsm commented 1 month ago

I managed to successfully compile and run my app on android 14 device with targetSdkVersion 34 and DJI SDK 4.18-a1 and uxsdk 4.16.2 (I have not tried the sample app). I still haven’t fully tested my app but don’t expect further problems.

geeksilva97 commented 1 month ago

I managed to successfully compile and run my app on android 14 device with targetSdkVersion 34 and DJI SDK 4.18-a1 and uxsdk 4.16.2 (I have not tried the sample app). I still haven’t fully tested my app but don’t expect further problems.

That's interesting. Have you done any specific configuration?

geeksilva97 commented 1 month ago

@dji-dev any clue for when we have dji-uxsdk too? I'm getting the following error

2: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:mergeReleaseNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeNativeLibsTask$MergeNativeLibsTaskWorkAction
   > 2 files found with path 'lib/arm64-v8a/libDJICSDKCommon.so' from inputs:
      - /Users/edysilva/.gradle/caches/transforms-3/73ea942cea79d1fa099fdc8f34cc965c/transformed/jetified-dji-sdk-alpha-4.18-a1/jni/arm64-v8a/libDJICSDKCommon.so
      - /Users/edysilva/.gradle/caches/transforms-3/004070d3edf6633274c45e074e8956cf/transformed/jetified-dji-sdk-4.16.2/jni/arm64-v8a/libDJICSDKCommon.so
     If you are using jniLibs and CMake IMPORTED targets, see
     https://developer.android.com/r/tools/jniLibs-vs-imported-targets

app/build.gradle

    implementation ('com.dji:dji-uxsdk:4.16.2', {
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        //exclude module: 'library-anti-distortion'
        exclude module: 'fly-safe-database'
        exclude group: 'com.mapbox.mapboxsdk' // this dependency is no longer needed
        exclude group: 'com.amap.api' //because of problems with GOOGLE PLAY
    })

    implementation ('com.dji:dji-sdk-alpha:4.18-a1',{
        /**
         * Uncomment the "library-anti-distortion" if your app does not need Anti Distortion for Mavic 2 Pro and Mavic 2 Zoom.
         * Uncomment the "fly-safe-database" if you need database for release, or we will download it when DJISDKManager.getInstance().registerApp
         * is called.
         * Both will greatly reducing the size of the APK.
         */
        //exclude module: 'library-anti-distortion'
        exclude module: 'fly-safe-database'
        exclude group: 'com.amap.api' //because of problems with GOOGLE PLAY
    })
    compileOnly ('com.dji:dji-sdk-provided-alpha:4.18-a1')

Looks like dependencies from dji-uxsdk are conflicting with dji-sdk-alpha. This was not happening with version 'com.dji:dji-sdk:4.17

The UXSDK currently does not have an update plan. You may try replacing the MSDK module in the UXSDK with the latest alpha version. Like this:https://sdk-forum.dji.net/hc/en-us/articles/5318331701657-How-to-solve-the-MSDK-and-UXSDK-version-inconsistency-problem

I can't do this. Was anything different done in the packaging? It's really weird 4.17 works fine but 4.18 doesn't

lachlanwp commented 1 month ago

@dji-dev where does com.cySdkyc.clx come from? Is it in one of the dependencies in the build.gradle file? Which one?

Thanks for all your hard work 👍

lachlanwp commented 1 month ago

@dji-dev @dji-lyt

I was able to solve my issue. It has nothing to do with com.cySdkyc.clx (although it is noted I needed to change usage of com.secneo.sdk.Helper to com.cySdkyc.clx.Helper) - the problem was that I used this in my application:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            registerReceiver(mReceiver, filter, RECEIVER_NOT_EXPORTED);
        }else {
            registerReceiver(mReceiver, filter);
        }

where mReceiver was responsible for updating my application UI to allow the user to continue to 'go fly'

    protected BroadcastReceiver mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            refreshSDKRelativeUI();
        }
    };

I changed RECEIVER_NOT_EXPORTED to RECEIVER_EXPORTED and now it's working.

I'm now able to use my app and all functionality with the Alpha version of the SDK on Android 14.0.

To clarify for others having trouble, I don't use the UXSDK anywhere in my app.

Thanks DJI for your extra support and for making this possible, it means a lot!

dscottbot commented 1 month ago

com.secneo.sdk.Helper to com.cySdkyc.clx.Helper

Where did you find this? when I downloaded the Mobile-SDK-Android-sdk_releases-4.18-alpha files it was still referencing com.secneo.sdk.Helper. At least with what I saw. And like, everywhere else was claiming that, secneo was correct.

if it wasnt for your comment, SAVING THE DAY, I would have been screwed, I got really stuck on that part. Thank you so much for clearing this up!

EDIT

Note: Please change "com.secneo.sdk.Helper.install(this)" in MSDK application initialization to "com.cySdkyc.clx.Helper.install(this)", otherwise MSDK will not run

Update. I see in the link you posted it mentions making the change for the MSDK 5. I guess my new question is how did you know that the MDSK 5 stuff applied to the Mobile-SDK v4.18 stuff as well?

WORKING

Thanks @lachlanwp for your comment about Receiver_exported. With that change I was able to get my code running on both Android 13 & 14 with Target SDK 34.

I wasnt getting an error showing up in Android Studio, instead my app just crashed saying "One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't".

Swapping things around to something like this was the last missing part.

mainActivity.registerReceiver(usbEventsReceiver, usbEvents, Context.RECEIVER_EXPORTED);


Thanks Everyone and Thanks @dji-dev

ngocanhbui1411 commented 1 month ago

The test version compatible with Android 14 has been released:https://github.com/dji-sdk/Mobile-SDK-Android/tree/sdk_releases/4.18-alpha @brien-crean @geeksilva97 @mitchrsm @lachlanwp

Hi there, did this new SDK version support for Android 14?

dji-lyt commented 1 month ago

The test version compatible with Android 14 has been released:https://github.com/dji-sdk/Mobile-SDK-Android/tree/sdk_releases/4.18-alpha @brien-crean @geeksilva97 @mitchrsm @lachlanwp

Hi there, did this new SDK version support for Android 14?

Yes, it is compatible with Android 14.

huongta157 commented 1 month ago

@dji-dev @dji-lyt Does your team have any plan to release version 4.18?

dji-dev commented 1 month ago

Agent comment from yating.liao in Zendesk ticket #111263:

We are planning to release version 4.18 this month.

°°°

dji-lyt commented 4 weeks ago

The MSDK 4.18 has been officially released. image

huongta157 commented 4 weeks ago

@dji-lyt thank you so much

huongta157 commented 4 weeks ago

@dji-lyt how about sdk V5?

dji-dev commented 3 weeks ago

Agent comment from yating.liao in Zendesk ticket #111263:

The Mobile SDK version 5.11 will also be released soon.

°°°

geeksilva97 commented 3 days ago

Quick update on my side. 4.18 alpha had some conflicts as I mentioned here.

I could manage this in build.gradle and replacing the secneo with the cySdkyc thing - as stated in Release notes - it worked with uxsdk 4.16.2 🚀 . (Honestly, it was not clear till I saw the [lachlanwp](https://github.com/lachlanwp)'s comment)

NOTE: On 4.18 even the conflicts disappeared so the workarounds I had made are no longer needed.