Не удалось найти явный класс активности при открытии deeplink

У меня было приложение Xamarin.Android с глубокими ссылками на API32. После того, как я обновил API до 33, Deeplinks сломался. У меня было это исключение в моих журналах:

Time    Device Name Type    PID Tag Message
02-14 08:25:48.878  OnePlus IN2015  Error   16453   AcceptInvitation    android.content.ActivityNotFoundException: Unable to find explicit activity class {PACKAGENAME/crc645ff435851f1c2612.MainActivity}; have you declared this activity in your AndroidManifest.xml, or does your intent not match its declared <intent-filter>?
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2184)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1831)
    at android.app.Activity.startActivityForResult(Activity.java:5555)
    at hcm.platform_startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hcl.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at com.google.android.chimera.android.Activity.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hgx.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hcl.public_startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hcm.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):3)
    at android.app.Activity.startActivityForResult(Activity.java:5508)
    at hcm.platform_startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at hcl.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at com.google.android.chimera.android.Activity.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at hgx.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at hcl.public_startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at hcm.startActivityForResult(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at android.app.Activity.startActivity(Activity.java:6011)
    at hcm.platform_startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hcl.startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at com.google.android.chimera.android.Activity.startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hcl.public_startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):2)
    at hcm.startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):3)
    at android.app.Activity.startActivity(Activity.java:5978)
    at hcm.platform_startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at hcl.startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at com.google.android.chimera.android.Activity.startActivity(:com.google.android.gms@230413045@23.04.13 (190408-505809224):1)
    at kmv.x(:com.google.android.gms@230413045@23.04.13 (190408-505809224):4)
    at kmw.onPostExecute(:com.google.android.gms@230413045@23.04.13 (190408-505809224):3)
    at android.os.AsyncTask.finish(AsyncTask.java:771)
    at android.os.AsyncTask.-$$Nest$mfinish(Unknown Source:0)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:240)
    at android.os.Looper.loop(Looper.java:351)
    at android.app.ActivityThread.main(ActivityThread.java:8355)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)

Пробовал гуглить решение этой проблемы, много перепробовал: Изменены настройки ProGuard, Проверял разные вариации вызова MainActivity с именем сборки и просто с точкой, Обновлены мои библиотеки и SDK, Я пытался прописать другие действия, Проверил сборки работают как в отладке, так и в релизе, Проанализированы файлы dex. Ничего особо не помогает. Собственный анализ показал, что проблема в том, что есть две MainActivities в список активностей. Я также прилагаю AndroidManifest:

...
<application android:requestLegacyExternalStorage = "true"
                 android:allowBackup = "true" android:icon = "@mipmap/icon"
                 android:largeHeap = "true" android:supportsRtl = "true"
                 android:label = "@string/app_name"
                 android:theme = "@style/AppTheme"
                 android:localeConfig = "@xml/locales_config"
                 android:name = ".MyApplication">
...
        <activity android:name = ".MainActivity" android:exported = "true">
            <intent-filter android:autoVerify = "true">
                <action android:name = "android.intent.action.VIEW"/>
                <category android:name = "android.intent.category.DEFAULT"/>
                <category android:name = "android.intent.category.BROWSABLE"/>
                <data android:scheme = "https" />
                <data android:scheme = "http" />
                <data android:host = "SITE.com" />
                <data android:host = "OWN.LINK" />
            </intent-filter>
        </activity>
...
    </application>

Класс MainActivity имеет атрибут MainLauncher. Помоги мне, пожалуйста! Я потратил на это день и боюсь, что без посторонней помощи могу застрять надолго. Кажется, что ошибка может быть очевидной.

[Activity(ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true, MainLauncher = true)]
    public class MainActivity : AppCompatActivity
{
...
}

УПД: Иногда у меня было это исключение:

Time    Device Name Type    PID Tag Message
02-14 08:38:29.150  OnePlus IN2015  Info    28812   MonoDroid   Caused by: java.lang.ClassNotFoundException: Didn't find class "PACKAGENAME.MainActivity" on path: DexPathList[[zip file "/data/app/~~jXWlqXqgllqjZ1bi2qN5dg==/PACKAGENAME-gqSZGEIemXo6mh-lUysz-w==/base.apk"],nativeLibraryDirectories=[/data/app/~~jXWlqXqgllqjZ1bi2qN5dg==/PACKAGENAME-gqSZGEIemXo6mh-lUysz-w==/lib/arm64, /data/app/~~jXWlqXqgllqjZ1bi2qN5dg==/PACKAGENAME-gqSZGEIemXo6mh-lUysz-w==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
    at androidx.core.app.CoreComponentFactory.instantiateActivity(SourceFile:45)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1347)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3745)
    ... 12 more

Пожалуйста, не добавляйте сообщения об ошибках в виде изображений. Изображения приветствуются, если вы проясните вопрос. Но, пожалуйста, публикуйте сообщения об ошибках в виде форматированного текста в своем вопросе.

burnsi 13.02.2023 23:37

@burnsi извини. Хорошо, я исправлю

Pavel Derevyankin 14.02.2023 06:18
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
0
2
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ошибка «ActivityNotFoundException» обычно возникает, когда приложение Android пытается запустить действие с помощью намерения, но указанный класс действия не может быть найден или не существует. Вы можете попробовать ниже некоторые хитовые и пробные методы:

Проблема может быть связана с неправильным именем класса активности, поэтому убедитесь, что имя класса активности в вашем намерении указано правильно, включая имя пакета.

Также убедитесь, что класс активности должен быть объявлен в вашем файле AndroidManifest.xml, иначе он не будет распознан системой Android.

Если класс Activity присутствует в вашем коде, но вы по-прежнему сталкиваетесь с этой ошибкой, это может быть связано с тем, что класс Activity не включен в ваш APK-файл. Это может произойти, если класс неправильно указан в коде или если процесс сборки исключает класс из APK.

Если класс Activity запускается через ссылку на контент, просто убедитесь, что для Activity в файле AndroidManifest.xml настроены правильные фильтры Intent.

Также возможно, что обновление API 32 до API 33 могло вызвать изменения в платформе Android, влияющие на ваши ссылки на контент. Вы можете проверить документацию для разработчиков Android на наличие изменений в способе обработки глубоких ссылок в API 33 и соответствующим образом внести необходимые обновления в свой код.

Я надеюсь, что эти выводы помогут вам развеять ваши сомнения.

Спасибо.

Ответ принят как подходящий

В сгенерированном Manifest.xml файле, который вы разместили, я не смог найти следующее intent-filter:

  <intent-filter>
    <action android:name = "android.intent.action.MAIN" />
    <category android:name = "android.intent.category.LAUNCHER" />
  </intent-filter>

Поэтому вы можете перепроверить, правильно ли вы установили MainLauncher = true для своей деятельности.

Вы можете обратиться к моей настройке следующим образом:

    [Activity(Label = "SearchBarDemos", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true,Exported =true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
    [
    IntentFilter
    (
        new[] { Android.Content.Intent.ActionView },
        Categories = new[]
            {
                Android.Content.Intent.CategoryDefault,
                Android.Content.Intent.CategoryBrowsable
            },
        DataSchemes = new[] { "myapp" }
    )
]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
    }

И вы можете обратиться к аналогичной теме здесь: Переход от одного приложения к другому с помощью Xamarin.

Примечание:

Если вы установили ActivityAttribute MainLauncher = true для своей MainActivity, вам не нужно устанавливать его в файле Manifest.xml, что легко приводит к созданию двух MainActivity, как вы сказали.

Другими словами, вам не нужно добавлять какой-либо код в генерируемый файл Manifest.xml.

Для получения дополнительной информации, пожалуйста, проверьте:Работа с манифестом Android.

Спасибо! Прошу прощения, забыл сказать, что я добавляю «MainLauncher = true» в MainActivity. Теперь я обновляю свой пост и добавляю код MainActivity.

Pavel Derevyankin 14.02.2023 06:17

Вы добавили тег `<activity android:name = ".MainActivity" android:exported = "true">` из AndroidManifest.xml вручную? Вам не нужно добавлять его вручную.

Jessie Zhang -MSFT 14.02.2023 06:31

@jessie-zhang-msft Ага. Я добавляю этот блок вручную. Как я могу получить его от генератора?

Pavel Derevyankin 14.02.2023 06:44

Ой! Я сейчас читаю вашу ссылку. И понять, что я могу сделать. Я попытаюсь добавить фильтр намерений к атрибутам активности.

Pavel Derevyankin 14.02.2023 06:47

Другие вопросы по теме