Я использую Proguard с моими приложениями, и я получаю NullPointerExceptions
, отправленный на мою консоль разработчика для случайных пользователей. Когда я делаю ReTrace, это проблема с AdView
, которую я использую. Сбивает с толку, ошибка происходит в моем Service
, который, очевидно, не использует объявления. Не уверен, что Proguard
что-то делает с кодом или что. Это де-затемненный трассировки стека:NullPointerException с proguard
java.lang.NullPointerException
at com.google.ads.internal.AdWebView$1.a(Unknown Source)
at com.app.base.MainService.onHandleIntent(Unknown Source)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.os.HandlerThread.run(HandlerThread.java:60)
MainService
моя служба, которая затем показывает, от того, что я могу сказать, NullPointerException
, связанные с com.google.ads.internal.AdView
.
Недавно я понял, что я не звал destroy()
на моей AdView, поэтому я добавил это к Activities
, которые используют его:
@Override
public void onDestroy()
{
if (adView != null)
adView.destroy();
super.onDestroy();
}
Не уверен, если это вызовет проблемы.
Это мой proguard.cfg
файл:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-libraryjars C:\Workspace\JARs\GoogleAdMobAdsSdk-6.0.0.jar
-libraryjars C:\Workspace\JARs\android-support-v4.jar
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontwarn **CompatHoneycomb
-dontwarn **CompatHoneycombMR2
-dontwarn **CompatCreatorHoneycombMR2
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.Fragment
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.app.base.KeywordsFragment
-keep class com.app.base.ListingFragment
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
# This will avoid all the onClick listeners referenced from XML Layouts from being removed
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-dontwarn android.support.**
UPDATE:
После просмотра инструкции Proguard, я нашел это в разделе Устранение:
«MissingResourceException или NullPointerException Ваш обработанный код может оказаться не в состоянии найти некоторые файлы ресурсов. ProGuard просто копирует файлы ресурсов с входных банок на выход ja RS «.
Wonder, если мне нужно использовать keepdirectories
UPDATE 2:
Я интересно, если это добавление будет исправить мою проблему. Я не могу это проверить, потому что я не могу сам воссоздать ошибку. Это происходит только для случайных пользователей:
-keep class com.google.ads.** {*;}
UPDATE 3:
После восстанавливая другие ошибки я получаю в консоли разработчика, все они, как представляется, связаны с com.google.ads, например:
java.lang.NullPointerException
at com.google.ads.InterstitialAd.a(Unknown Source)