2016-01-20 103 views
0

我很确定这不是关于Theme.AppCompat,因为启用proguard的应用最初运行良好,没有com.google.android.gms:play-services-ads:7.5.0,但在添加com.google.android.gms:play-services-ads:7.5.0后发生错误。java.lang.RuntimeException:使用admob sdk时无法启动活动ComponentInfo

随着com.google.android.gms:play-services-ads包括,它只适用于禁用proguard时。

是否有人可以帮忙吗?我真的很讨厌java无法保护源代码,并希望我永远不能使用proguard。

错误堆栈

致命异常:主要了java.lang.RuntimeException:无法启动 活性 ComponentInfo {com.company.project/com.company.project.MainActivity}: 的java。 lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat 主题(或后代)。 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2463) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520) 在android.app.ActivityThread.access $ 600(ActivityThread.java:162) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1366) 在android.os.Handler.dispatchMessage(Handler.java:99) 在android.os.Looper.loop(Looper.java:158) 在android.app.ActivityThread.main(ActivityThread.java:5751) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1083) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850) at dalvik.system.NativeStart.main(Native Method)引起:java.lang.IllegalStateException:您需要使用Theme.AppCompat 主题(或后代)与此活动。 at android.support.v7.a.ae.q(Unknown Source) at android.support.v7.a.ae.p(Unknown Source) at android.support.v7.a.ae.a(Unknown Source ) at android.support.v7.ausetContentView(Unknown Source) at com.company.project.MainActivity.onCreate(Unknown Source) at android.app.Activity.performCreate(Activity.java:5165) at android。 (android.app.ActivityThread.java:2520) at android.app。在android.app.Activit上使用ActivityThread.access $ 600(ActivityThread.java:162) ythread $ H.handleMessage(ActivityThread.java:1366) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:158) at android.app。 ActivityThread.main(ActivityThread.java:5751) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal .os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1083) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850) at dalvik.system.NativeStart。主(本机方法)

摇篮:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "com.company.project" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     debug { 
     // proguard enabled for debug 
      minifyEnabled true 
      FileCollection proGuardFileCollection = files { file('./proguard').listFiles() } 
      proguardFiles(proGuardFileCollection) 
      proguardFiles getDefaultProguardFile('proguard-android.txt') 
     } 
     release { 
      minifyEnabled true 
      FileCollection proGuardFileCollection = files { file('./proguard').listFiles() } 
      proguardFiles(proGuardFileCollection) 
      proguardFiles getDefaultProguardFile('proguard-android.txt') 

     } 
    } 
} 

dependencies { 
    compile project(':vitamio') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile 'com.facebook.fresco:fresco:0.8.1' 
    compile 'com.loopj.android:android-async-http:1.4.9' 
    compile 'in.srain.cube:ultra-ptr:1.0.11' 
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.12' 

    compile 'com.google.android.gms:play-services-ads:7.5.0' 

    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 

} 

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 

apply plugin: 'com.android.application' 

apply plugin: 'io.fabric' 
repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 

AndroidManifes.xml:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/logo" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

<!-- note: @style/AppTheme is defined as 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 
--> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".VideoPlayerActivity" android:theme="@style/AppTheme.NoActionBar"/> 
    <activity android:name=".VideoActivity" android:theme="@style/AppTheme.NoActionBar"/> 

    <!--AdMob--> 
    <meta-data android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version"/> 
    <activity android:name="com.google.android.gms.ads.AdActivity" 
     android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
     android:theme="@android:style/Theme.Translucent" /> 


</application> 

Proguard的适用于AdMob(来自AdMob的在github例如复制):

# For Google Play Services 
-keep public class com.google.android.gms.ads.**{ 
    public *; 
} 

# For old ads classes 
-keep public class com.google.ads.**{ 
    public *; 
} 

# For mediation 
#-keepattributes *Annotation* 

# Other required classes for Google Play Services 
# Read more at http://developer.android.com/google/play-services/setup.html 
-keep class * extends java.util.ListResourceBundle { 
    protected Object[][] getContents(); 
} 

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 

-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 

-keepnames class * implements android.os.Parcelable { 
    public static final ** CREATOR; 
} 
+0

在你的主题父母主题应该使用Theme.AppCompat主题 – justDroid

+0

@justDroid对不起,我没有给出足够的'@ sylte/AppTheme'定义,信息更新。我确实使用过'Theme.AppCompat.Light.DarkActionBar',是不是'Theme.AppCompat'? – Alston

+0

@justDroid我只是'Theme.AppCompat',但仍然失败:你的清单中的 – Alston

回答

2

以下是你在你的ProGuard规则需要什么的AdMob:

-keep class com.google.android.gms.common.GooglePlayServicesUtil {*;} 
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {*;} 
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {*;} 

-keep class com.google.android.gms.** { *; } 
-dontwarn com.google.android.gms.** 
-keep class com.google.ads.** {*;} 

检查是否有遗漏或仅添加全部(无差异),然后检查您的应用是否正常工作。

此外,哪个类是您的活动Java文件扩展,如果它延伸ActionBarActivity,将其更改为只是Activity

+0

它的工作原理,但当我试图回退找到哪里出了问题,错误再也没有发生过,错误累积了我整天然后它就消失了,真的不知道问题是什么,无论如何,谢谢你,拯救我的一天! – Alston

相关问题