Ошибка Xamarin Android Theme.AppCompat — только во время выполнения

У меня есть приложение, которое использует библиотеки поддержки v4 и v7. Он отлично работает в режиме отладки, но теперь я запускаю его в режиме выпуска и получаю сообщение об ошибке, связанной с темой.

«Вам нужно использовать тему Theme.AppCompat (или потомок) с этим действием».

Это объявление в верхней части моего приложения, где я объявляю тему AppCompat:

   [Activity(Label = "My App", LaunchMode = LaunchMode.SingleTask, Theme="@style/Theme.AppCompat.Light", ScreenOrientation = ScreenOrientation.Portrait)]

Я также заявляю об этом в манифесте:

<application android:icon="@drawable/logo" android:debuggable="false" android:label="My App" android:theme="@style/Theme.AppCompat.Light">

Вот моя трассировка стека. Любая помощь будет очень высоко ценится.

libc] WARNING: generic atexit() called from legacy shared library
[monodroid-gc] GREF GC Threshold: 46800
[dalvikvm-heap] Grow heap (frag case) to 9.750MB for 803952-byte allocation
[dalvikvm-heap] Grow heap (frag case) to 11.473MB for 1607840-byte allocation
[Adreno-EGL] <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
[OpenGLRenderer] Enabling debug mode 0
[Request] Warning: Sessionless Request needs token but missing either application ID or client token.
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Java.Lang.RuntimeException: Exception of type 'Java.Lang.RuntimeException' was thrown.
[MonoDroid] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
[MonoDroid] at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) <0x000e7>
[MonoDroid] at Android.App.Activity.OnCreate (Android.OS.Bundle) <0x001f3>
[MonoDroid] at FrogPoint.Droid.MainActivity.OnCreate (Android.OS.Bundle) <0x0001f>
[MonoDroid] at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x0005b>
[MonoDroid] at (wrapper dynamic-method) object.167c14b1-1233-456f-ab3e-1b59de9fa9bf (intptr,intptr,intptr) <0x00043>
[MonoDroid]   --- End of managed exception stack trace ---
[MonoDroid] java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
[MonoDroid]     at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110)
[MonoDroid]     at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
[MonoDroid]     at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99)
[MonoDroid]     at frogpoint.droid.MainActivity.n_onCreate(Native Method)
[MonoDroid]     at frogpoint.droid.MainActivity.onCreate(MainActivity.java:41)
[MonoDroid]     at android.app.Activity.performCreate(Activity.java:5231)
[MonoDroid]     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
[MonoDroid]     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
[MonoDroid]     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
[MonoDroid]     at android.app.ActivityThread.access$800(ActivityThread.java:135)
[MonoDroid]     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
[MonoDroid]     at android.os.Handler.dispatchMessage(Handler.java:102)
[MonoDroid]     at android.os.Looper.loop(Looper.java:136)
[MonoDroid]     at android.app.ActivityThread.main(ActivityThread.java:5001)
[MonoDroid]     at java.lang.reflect.Method.invokeNative(Native Method)
[MonoDroid]     at java.lang.reflect.Method.invoke(Method.java:515)
[MonoDroid]     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
[MonoDroid]     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
[MonoDroid]     at dalvik.system.NativeStart.main(Native Method)
[mono] 
[mono] Unhandled Exception:
[mono] Java.Lang.RuntimeException: Exception of type 'Java.Lang.RuntimeException' was thrown.
[mono] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
[mono] at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) <0x000e7>
[mono] at Android.App.Activity.OnCreate (Android.OS.Bundle) <0x001f3>
[mono] at FrogPoint.Droid.MainActivity.OnCreate (Android.OS.Bundle) <0x0001f>
[mono] at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x0005b>
[mono] at (wrapper dynamic-method) object.167c14b1-1233-456f-ab3e-1b59de9fa9bf (intptr,intptr,intptr) <0x00043>
[mono] 
[mono]   --- End of managed exception stack trace ---
[mono] java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
[mono]  at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110)
[mono]  at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
[mono]  at android.support.v7.app.ActionBarActivit
[mono-rt] [ERROR] FATAL UNHANDLED EXCEPTION: Java.Lang.RuntimeException: Exception of type 'Java.Lang.RuntimeException' was thrown.
[mono-rt] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
[mono-rt] at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) <0x000e7>
[mono-rt] at Android.App.Activity.OnCreate (Android.OS.Bundle) <0x001f3>
[mono-rt] at FrogPoint.Droid.MainActivity.OnCreate (Android.OS.Bundle) <0x0001f>
[mono-rt] at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x0005b>
[mono-rt] at (wrapper dynamic-method) object.167c14b1-1233-456f-ab3e-1b59de9fa9bf (intptr,intptr,intptr) <0x00043>
[mono-rt] 
[mono-rt]   --- End of managed exception stack trace ---
[mono-rt] java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
[mono-rt]   at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110)
[mono-rt]   at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
[mono-rt]   at android.support.v7.app.Act

person Can'tCodeWon'tCode    schedule 04.09.2014    source источник
comment
Вам нужно скомпилировать его с API 14 или выше.   -  person Cheesebaron    schedule 05.09.2014
comment
Спасибо, Cheesebaron, но мой Target framework уже 4.4, а минимум установлен на 4.3. Так что я не думаю, что это проблема, если я что-то упустил.   -  person Can'tCodeWon'tCode    schedule 05.09.2014
comment
Вы используете ActionBarActivity или просто Activity?   -  person Cheesebaron    schedule 05.09.2014
comment
Кроме того, если вы используете версию 4.3 и выше, зачем вам поддержка версии 7?   -  person Cheesebaron    schedule 05.09.2014
comment
Да, очень хороший вопрос, и чтобы решить проблему, я перешел с ActionbarActivity на Activity и внес все остальные необходимые изменения в свои фрагменты. Кажется, это сделало это, я просто нервничал по поводу его изменения, будучи довольно неопытным во фрагментах и ​​​​пакетах поддержки. Я благодарю вас за вашу помощь Cheesebaron.   -  person Can'tCodeWon'tCode    schedule 05.09.2014


Ответы (3)


Итак, как мы обсуждали в комментариях к ОП. Нет необходимости использовать Support v7, если вы ориентируетесь на Android 4.3 и выше. Пакеты поддержки предназначены для обеспечения обратной совместимости с уровнями API, которые не поддерживают материалы из более новых уровней API. Например, ActionBar, Fragments и т. д. Однако, начиная с API 13, Fragments и ActionBar включены, поэтому поддержка v7 требуется только для уровней API ниже.

Что касается сбоя, с которым вы столкнулись, он был исправлен в более ранней версии Xamarin.Android, поэтому, если вы не используете ни одну из более новых версий, это могло быть проблемой. Последняя стабильная версия должна быть в порядке.

person Cheesebaron    schedule 05.09.2014

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

android:theme="@style/Theme.AppCompat.NoActionBar"

Не используйте другие темы. Это обязательно сработает.

person Irfan Yousf    schedule 04.08.2017

Вот шаги: Перейдите в «Свойства» -> «Androidmanifest.xml». Он откроет файл в среде IDE. Введите значение в тему приложения как @style/MagicTheme. Сохраните его. Теперь перейдите в «Ресурсы» -> «Значения» — добавьте файл по стилю .xml напишите приведенный ниже код в style.xml

<resources>
  <style name="MyTheme.Base" parent="Theme.AppCompat.Light">
  </style>
  <style name="MyTheme" parent="MyTheme.Base">
  </style>
  <style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/pngfilename</item>
    <item name="android:windowNoTitle">true</item>  
    <item name="android:windowFullscreen">false</item>  
    <item name="android:windowContentOverlay">@null</item>  
    <item name="android:windowActionBar">true</item>  
  </style>
</resources>
person Sanjay Shrivastava    schedule 06.02.2018