在 minifyEnabled true 后启动应用程序时出现 NumberFormatException

Posted

技术标签:

【中文标题】在 minifyEnabled true 后启动应用程序时出现 NumberFormatException【英文标题】:NumberFormatException while starting app after minifyEnabled true 【发布时间】:2017-05-31 06:14:44 【问题描述】:

我正在寻找解决这个问题的方法:

01-16 12:29:55.975 1199-1334/com.zztproject.curlife E/androidRuntime: FATAL EXCEPTION: Thread-16992
                                                                  Process: com.zztproject.curlife, PID: 1199
                                                                  java.lang.NumberFormatException: Invalid int: "null"
                                                                      at java.lang.Integer.invalidInt(Integer.java:138)
                                                                      at java.lang.Integer.parseInt(Integer.java:358)
                                                                      at java.lang.Integer.parseInt(Integer.java:334)
                                                                      at com.zztproject.curlife.HomeActivity$a.run(Unknown Source)

我发现这个问题是由 minifyEnabled true 引起的。我的 gradle 文件(片段):

    buildTypes 
    debug 
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    
    release 
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    


dependencies 
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', 
    exclude group: 'com.android.support', module: 'support-annotations'
)
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.android.support:design:25.0.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:gridlayout-v7:25.0.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.android.volley:volley:1.0.0'
compile group: 'com.koushikdutta.urlimageviewhelper', name: 'urlimageviewhelper', version: '1.0.4'

还有我的 proguard-rules.pro:

-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe  *; 
-keep class com.google.gson.examples.android.model.**  *; 
-keepclassmembers class com.zztprojects.curlife 
 public *;

这是我的项目结构:

请帮我解决这个问题,我尝试了很多我在 *** 上找到的东西都没有成功。

编辑: 我来自 HomeActivity 的空值:

    private void publishProgressEvents(final Event mEvent) 
    runOnUiThread(new Runnable() 
        LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout layout = null;
        LinearLayout container = null;
        ImageView logo = null;
        TextView name = null;
        TextView timePlace = null;
        String timePlaceInfo;
        TextView description = null;
        LinearLayout list = (LinearLayout) findViewById(R.id.listEventsHome);
        Events event;
        ImageView photo;
        @Override
        public void run() 
        ...
        container.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View view) 
                    if(event.eventUrl != "" && event.eventUrl != null) 
                        goToUrlOfEvent(event.eventUrl);
                    
                
            );

EDIT2:现在错误显示这一行:

            for (int counter = 0; counter < Integer.parseInt(number.number); counter++) 

EDIT3:我的 EventsNumber 类:

private class EventsBumber 
    @SerializedName("number")
    Integer number;

【问题讨论】:

NumberFormatException: Invalid int: "null" 显示代码 您的HomeActivity.java 文件中似乎引发了此异常。可以分享一下吗? @IntelliJAmiya 我没有来自 HomeActicity 的特定行会导致问题。 这个文件很大,还是只是run()方法? @AnkushBist minifyEnabled 为 false 时没有问题。 【参考方案1】:

我只需要添加这一行 @SerializedName("number") 之前Integer number; 最后这个片段:

    @SerializedName("number")
    Integer number;

【讨论】:

以上是关于在 minifyEnabled true 后启动应用程序时出现 NumberFormatException的主要内容,如果未能解决你的问题,请参考以下文章

使用 minifyEnabled true 启动应用程序时 FirebaseInitProvider.onCreate 中的 java.lang.IncompatibleClassChangeErro

将 minifyEnabled 设置为 true 后,我收到以下错误 [重复]

生成带有 minifyEnabled 设置为 true 的签名 APK 后,firebase UI 输出空白

Android proguard minifyEnabled true + multidex = error

NotSerializableException: kotlin.UNINITIALIZED_VALUE 设置 minifyEnabled 后为 true

Proguard minifyEnabled true 用于调试构建,不适用于预棒棒糖