Не удалось найти явный класс активности при открытии 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@[email protected] (190408-505809224):2)
    at hcl.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):2)
    at com.google.android.chimera.android.Activity.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):2)
    at hgx.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):2)
    at hcl.public_startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):2)
    at hcm.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):3)
    at android.app.Activity.startActivityForResult(Activity.java:5508)
    at hcm.platform_startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):1)
    at hcl.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):1)
    at com.google.android.chimera.android.Activity.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):1)
    at hgx.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):1)
    at hcl.public_startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):1)
    at hcm.startActivityForResult(:com.google.android.gms@[email protected] (190408-505809224):1)
    at android.app.Activity.startActivity(Activity.java:6011)
    at hcm.platform_startActivity(:com.google.android.gms@[email protected] (190408-505809224):2)
    at hcl.startActivity(:com.google.android.gms@[email protected] (190408-505809224):2)
    at com.google.android.chimera.android.Activity.startActivity(:com.google.android.gms@[email protected] (190408-505809224):2)
    at hcl.public_startActivity(:com.google.android.gms@[email protected] (190408-505809224):2)
    at hcm.startActivity(:com.google.android.gms@[email protected] (190408-505809224):3)
    at android.app.Activity.startActivity(Activity.java:5978)
    at hcm.platform_startActivity(:com.google.android.gms@[email protected] (190408-505809224):1)
    at hcl.startActivity(:com.google.android.gms@[email protected] (190408-505809224):1)
    at com.google.android.chimera.android.Activity.startActivity(:com.google.android.gms@[email protected] (190408-505809224):1)
    at kmv.x(:com.google.android.gms@[email protected] (190408-505809224):4)
    at kmw.onPostExecute(:com.google.android.gms@[email protected] (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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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