मैं Android बाज़ार पर एक आवेदन पत्र वितरित किया जाता है। मुझे कुछ छोटे उपयोगकर्ताओं (शायद 2%) से त्रुटि रिपोर्ट वापस मिल रही हैं, जहां उन्हें NullPointerExceptions मिल रहे हैं जहां यह तार्किक अर्थ नहीं बनाता है।एंड्रॉयड ProGuard समझ से परे कोड NullPointerException के कारण जब यह वास्तव में नहीं होना चाहिए
मैं इस अपने आप को दोहराने में सक्षम कभी नहीं किया गया है। कोड अपेक्षाकृत सरल है और एक सामान्य कोड पथ है जिसे प्रत्येक उपयोगकर्ता को पालन करना होता है। मैं वास्तव में कोड कि संभवतः एनपीई बनाने जा सकता है और एक कोशिश पकड़ ब्लॉक में लपेटा और एक कस्टम क्रम अपवाद के हर अलग लाइन कर लिया है, लेकिन मैं अभी भी पकड़ा नहीं NullPointerException त्रुटियों हो रही है।
इस बिंदु पर, केवल एक चीज मैं कल्पना कर सकते हैं यह होगा मेरी Proguard कहानियो से संबंधित कुछ है। मैंने कुछ अन्य आलेख देखा है - अगर आप अजीब व्यवहार देखते हैं, लेकिन जहां तक मैं कह सकता हूं, मैं उस विकल्प का उपयोग नहीं कर रहा हूं।
किसी और अनुभवी रहस्यमय NPEs एंड्रॉयड और ProGuard का उपयोग करके किया है। क्या ऐसी कोई अन्य सेटिंग्स है जो लोग इस समस्या के कारण हो रहे अनुकूलन को डायल करने के लिए अनुशंसा कर सकते हैं?
कोई अन्य विचार?
public MainMenuScreen(final HauntedCarnival game) {
super(game);
game.startMusic("data/music/intro.mp3");
stage = new Stage(Screen.SCREEN_WIDTH, Screen.SCREEN_HEIGHT,true);
stage.addActor(new Image("background", Assets.mainMenuBackground));
Image title = new Image("title", Assets.mainMenuTitle);
title.x = 0;
title.y = 340;
resetEyeBlink();
stage.addActor(title);
dispatcher.registerInputProcessor(stage);
settings = game.getSettings();
eyeBlinkImage = new Image("eyeBlink", Assets.eyeBlink);
if (settings.getPlayers().isEmpty()) {
settings.addPlayer("Player One");
settings.save(game);
}
setupContinue();
}
तो केवल संभावनाओं मैं खेल, डिस्पैचर और सेटिंग्स हैं देख सकते हैं:
संदर्भ के लिए, सुलझे समारोह है कि एनपीई हो रही है है।
खेल अन्य वर्ग में इस कोड के माध्यम से सेट हो जाता है। गेम उस अन्य वर्ग में एक अंतिम चर है:
game.setScreen(new MainMenuScreen(game));
प्रेषक सुपर ऊपर कॉल में प्रवेश के भीतर सेट हो जाता है।
getSettings() एक सेटिंग ऑब्जेक्ट देता है जो एप्लिकेशन की शुरुआत में सेट हो जाता है, निजी है और कभी भी परेशान नहीं होता है। यह कई बार इस विधि से पहले भी इस्तेमाल किया जाता है।
ऑटो-मुक्केबाजी प्राइमेटिव नहीं हैं।
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes Signature
-keep public class com.alkilabs.hauntedcarnival.settings.Settings
-keep public class com.alkilabs.hauntedcarnival.settings.Settings {
*;
}
-keep public class com.alkilabs.hauntedcarnival.settings.Player
-keep public class com.alkilabs.hauntedcarnival.settings.Player {
*;
}
-keepnames public class com.alkilabs.hauntedcarnival.world.World
-keepnames public class * extends com.alkilabs.hauntedcarnival.world.upgrades.Upgrade
-keepnames public class * extends com.alkilabs.hauntedcarnival.world.achievments.Achievement
-keepnames public class com.alkilabs.hauntedcarnival.world.monsters.MonsterType
-keepclassmembers class * extends com.alkilabs.hauntedcarnival.world.monsters.Monster {
public <init>(com.alkilabs.hauntedcarnival.world.monsters.MonsterType, java.lang.Integer, com.alkilabs.hauntedcarnival.world.World);
}
-keepnames public class com.alkilabs.hauntedcarnival.world.items.ItemType
-keepclassmembers class * extends com.alkilabs.hauntedcarnival.world.items.Item {
public <init>(com.alkilabs.hauntedcarnival.world.World, java.lang.Integer, java.lang.Integer);
}
-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.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-dontwarn com.badlogic.gdx.scenes.scene2d.ui.utils.DesktopClipboard
-dontwarn com.badlogic.gdx.utils.JsonWriter
-dontwarn com.badlogic.gdx.utils.XmlWriter
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
क्या आप कोड पोस्ट कर सकते हैं जो आपके द्वारा उपयोग की जाने वाली एनपीई और प्रोगार्ड सेटिंग्स का कारण बनता है? – Idolon
मैंने विशिष्ट कोड और मेरे प्रोगार्ड कॉन्फ़िगरेशन – Paul