Roa*_*nmo 14 android in-app-update android-14 android-api-34
我有一个使用应用程序内更新的 Android 应用程序。以 android 14 (API 34) 为目标后,应用程序将因以下错误而无法启动:
\nFATAL EXCEPTION: main\nProcess: no.norva24.mslam, PID: 8281\njava.lang.RuntimeException: Unable to start activity\nComponentInfo{no.norva24.mslam/no.norva24.mslam.ui.activities.MainActivity}: java.lang.SecurityException: no.norva24.mslam: One\nof RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered\nexclusively for system broadcasts\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)\n at android.os.Handler.dispatchMessage(Handler.java:106)\n at android.os.Looper.loopOnce(Looper.java:205)\n at android.os.Looper.loop(Looper.java:294)\n at android.app.ActivityThread.main(ActivityThread.java:8176)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)\nCaused by: java.lang.SecurityException: no.norva24.mslam: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED\nshould be specified when a receiver isn't being registered exclusively for system broadcasts\n at android.os.Parcel.createExceptionOrNull(Parcel.java:3057)\n at android.os.Parcel.createException(Parcel.java:3041)\n at android.os.Parcel.readException(Parcel.java:3024)\n at android.os.Parcel.readException(Parcel.java:2966)\n at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:5668)\n at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1852)\n at android.app.ContextImpl.registerReceiver(ContextImpl.java:1792)\n at android.app.ContextImpl.registerReceiver(ContextImpl.java:1780)\n at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)\n at com.google.android.play.core.listener.zzc.zzb(com.google.android.play:core@@1.10.3:3)\n at com.google.android.play.core.listener.zzc.zzf(com.google.android.play:core@@1.10.3:4)\n at com.google.android.play.core.appupdate.zzf.registerListener(com.google.android.play:core@@1.10.3:1)\n at no.norva24.mslam.utilities.updates.InAppUpdate.<init>(InAppUpdate.kt:62)\n at no.norva24.mslam.ui.activities.MainActivity.onCreate(MainActivity.kt:741)\n at android.app.Activity.performCreate(Activity.java:8595)\n at android.app.Activity.performCreate(Activity.java:8573)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3764)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)\xc2\xa0\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n at android.os.Looper.loopOnce(Looper.java:205)\xc2\xa0\n at android.os.Looper.loop(Looper.java:294)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:8176)\xc2\xa0\n\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)\xc2\xa0\nCaused by: android.os.RemoteException: Remote stack trace:\n at\ncom.android.server.am.ActivityManagerService.registerReceiverWithFeature(ActivityManagerService.java:13895)\n at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2563)\n at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2708)\n at android.os.Binder.execTransactInternal(Binder.java:1339)\n at android.os.Binder.execTransact(Binder.java:1275)\nRun Code Online (Sandbox Code Playgroud)\n我还没有看到任何关于如何设置这些设置的解释。
\n以下代码用于应用内更新:
\npackage no.norva24.mslam.utilities.updates\n\nimport android.app.Activity\nimport android.graphics.Color\nimport android.util.Log\nimport androidx.appcompat.app.AppCompatActivity\nimport com.google.android.material.snackbar.Snackbar\nimport com.google.android.play.core.appupdate.AppUpdateInfo\nimport com.google.android.play.core.appupdate.AppUpdateManager\nimport com.google.android.play.core.appupdate.AppUpdateManagerFactory\nimport com.google.android.play.core.install.InstallState\nimport com.google.android.play.core.install.InstallStateUpdatedListener\nimport com.google.android.play.core.install.model.AppUpdateType\nimport com.google.android.play.core.install.model.InstallStatus\nimport com.google.android.play.core.install.model.UpdateAvailability\nimport com.google.android.play.core.ktx.*\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport no.norva24.mslam.repositories.Message\nimport no.norva24.mslam.ui.activities.MainActivity\nimport no.norva24.mslam.utilities.definitions.SELF_UPDATE_REQUEST_CODE\nimport java.lang.Exception\n\nclass InAppUpdate(activity: Activity): InstallStateUpdatedListener {\n\n var TAG = javaClass.simpleName\n\n private var appUpdateManager: AppUpdateManager\n private var parentActivity: Activity = activity\n\n private var currentType = AppUpdateType.FLEXIBLE\n\n init {\n Log.i(TAG, "init: I100: Init InAppUpdate")\n\n appUpdateManager = AppUpdateManagerFactory.create(parentActivity)\n appUpdateManager.appUpdateInfo.addOnSuccessListener { info->\n Log.i(TAG, "init: I100: update info $info")\n if (info.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE){\n Message.info("App update available !")\n if((info.clientVersionStalenessDays?:0)<5){\n if(info.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)){\n startUpdate(info, AppUpdateType.FLEXIBLE)\n } else {\n Message.info("App update may be available on Google Play !")\n }\n } else {\n if(info.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)){\n startUpdate(info, AppUpdateType.IMMEDIATE)\n } else if(info.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)){\n startUpdate(info, AppUpdateType.FLEXIBLE)\n } else {\n Message.info("App update may be available on Google Play !")\n }\n }\n\n } else {\n Log.i(TAG, "I100: init: no update available")\n }\n }\n appUpdateManager.registerListener(this)\n }\n\n private fun startUpdate(info: AppUpdateInfo, type: Int){\n try {\n appUpdateManager.startUpdateFlowForResult(info,type,parentActivity, SELF_UPDATE_REQUEST_CODE)\n currentType = type\n }catch (exception:Exception){\n Message.error(exception.message.toString())\n }\n }\n\n fun onResume(){\n appUpdateManager.appUpdateInfo.addOnSuccessListener { info->\n if(currentType == AppUpdateType.FLEXIBLE){\n if(info.installStatus() == InstallStatus.DOWNLOADED)\n flexibleUpdateDownloadCompleted()\n } else if (currentType == AppUpdateType.IMMEDIATE){\n if(info.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {\n startUpdate(info, AppUpdateType.IMMEDIATE)\n }\n }\n }\n }\n\n fun onActivityResult(requestCode: Int, resultCode: Int){\n if(requestCode == SELF_UPDATE_REQUEST_CODE){\n if(resultCode != AppCompatActivity.RESULT_OK){\n Message.error("Update flow failed: $resultCode")\n }\n }\n }\n\n fun checkForUpdates(){\n CoroutineScope(Dispatchers.IO).launch {\n Log.i(TAG, "checkForUpdates: requesting appUpdateInfo")\n val appUpdateInfo = appUpdateManager.requestAppUpdateInfo()\n Log.i(TAG, "checkForUpdates: appUpdateInfo returned")\n Log.i(TAG, "checkForUpdates: available version code..........: ${appUpdateInfo.availableVersionCode()}" )\n Log.i(TAG, "checkForUpdates: bytes downloaded................: ${appUpdateInfo.bytesDownloaded}" )\n Log.i(TAG, "checkForUpdates: client version staleness days...: ${appUpdateInfo.clientVersionStalenessDays}" )\n Log.i(TAG, "checkForUpdates: install status..................: ${appUpdateInfo.installStatus}" )\n Log.i(TAG, "checkForUpdates: is update type allowed flexible.: ${appUpdateInfo.isFlexibleUpdateAllowed}" )\n Log.i(TAG, "checkForUpdates: is update type allowed immediate: ${appUpdateInfo.isImmediateUpdateAllowed}" )\n Log.i(TAG, "checkForUpdates: package name ...................: ${appUpdateInfo.packageName()}" )\n Log.i(TAG, "checkForUpdates: total bytes to download.........: ${appUpdateInfo.totalBytesToDownload}" )\n Log.i(TAG, "checkForUpdates: update availability ............: ${appUpdateInfo.updateAvailability()}" )\n Log.i(TAG, "checkForUpdates: update priority ................: ${appUpdateInfo.updatePriority}" )\n\n when(appUpdateInfo.updateAvailability()){\n UpdateAvailability.UPDATE_AVAILABLE-> {\n if(appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)){\n startUpdate(appUpdateInfo, AppUpdateType.FLEXIBLE)\n } else {\n Message.warning("App version ${appUpdateInfo.availableVersionCode()} should be ready\\nPlease check Google Play")\n }\n }\n UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS -> {\n Message.warning("App update is already in progress, ${appUpdateInfo.bytesDownloaded}/${appUpdateInfo.totalBytesToDownload} bytes downloaded")\n }\n UpdateAvailability.UNKNOWN -> {\n Message.error("Unknown error occurred checking updates")\n }\n UpdateAvailability.UPDATE_NOT_AVAILABLE -> {\n Message.info("No updates available at the moment")\n }\n }\n }\n\n }\n\n private fun flexibleUpdateDownloadCompleted(){\n Snackbar.make(\n (parentActivity as MainActivity).binding.appBarMain.coordinatorLayout,\n "An app update has just been downloaded. Please restart app.",\n Snackbar.LENGTH_INDEFINITE\n ).apply {\n setAction("RESTART") { appUpdateManager.completeUpdate()}\n setActionTextColor(Color.WHITE)\n show()\n }\n }\n\n fun onDestroy(){\n appUpdateManager.unregisterListener(this)\n }\n\n override fun onStateUpdate(state: InstallState) {\n if(state.installStatus() == InstallStatus.DOWNLOADED){\n flexibleUpdateDownloadCompleted()\n }\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n是否应该有一些附加参数manifest.xml尚未正确记录?
Lin*_*ino 10
您正在使用的 Play 应用内更新库的当前版本 (1.10.3) 不支持 Android 14。您必须将其升级到支持新 Android 操作系统的版本 2.1.0。
更多信息:https ://developer.android.com/reference/com/google/android/play/core/release-notes-in_app_updates
| 归档时间: |
|
| 查看次数: |
6646 次 |
| 最近记录: |