2014-09-04 4 views
1

J'ai une application qui utilise les bibliothèques de support v4 et v7. Cela fonctionne très bien dans le débogage, mais maintenant je suis parti pour le lancer en mode Release et j'ai une erreur concernant le thème.Xamarin Android Theme.AppCompat erreur - à l'exécution seulement

"Vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité."

C'est la déclaration au sommet de mon application, où je DÉCLARE un thème AppCompat:

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

Je déclare également dans le manifeste:

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

Voici ma trace de la pile . Toute aide sera la bienvenue.

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 
+0

Vous devez compiler avec l'API 14 ou plus. – Cheesebaron

+0

Merci Cheesebaron, mais mon cadre cible est déjà 4.4, et le minimum fixé à 4.3. Donc, je ne pense pas que ce soit le problème à moins que je ne manque quelque chose. –

+0

Utilisez-vous ActionBarActivity ou simplement Activity? – Cheesebaron

Répondre

0

Ainsi que nous en avons discuté dans les commentaires à l'OP. Il n'est pas nécessaire d'utiliser le support v7 si vous ciblez Android 4.3 ou version ultérieure. Les packages de support sont destinés à rendre la compatibilité ascendante avec les niveaux d'API qui ne prennent pas en charge le contenu des niveaux d'API les plus récents. Tels que ActionBar, Fragments, etc. Cependant, depuis l'API 13, Fragments et ActionBar sont inclus, de sorte que Support v7 n'est nécessaire que pour les niveaux d'API ci-dessous. En ce qui concerne le crash que vous avez rencontré, cela a été corrigé dans une version antérieure de Xamarin.Android, donc si vous n'utilisez aucune des versions les plus récentes, cela pourrait avoir été le problème. Dernière stable devrait être bien.

1

J'avais la même erreur dans mon application. La solution qui a fonctionné pour moi était simple. Utilisez simplement ce thème dans votre libellé d'activité

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

N'utilisez aucun autre thème. Cela fonctionnera sûrement.

0

Voici les étapes: Aller à la propriété -> AndroidManifest.xml Il va ouvrir le fichier dans IDE Entrez la valeur dans le thème de l'application comme @ le style/MagicTheme Enregistrer ce Maintenant, allez à Resources-- > valeurs - Ajouter un fichier par style.xml écrire le code ci-dessous dans 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> 
Questions connexes