首页 > 解决方案 > java.lang.NullPointerException:当proguard启用时名称为空

问题描述

当我java.lang.NullPointerException: name is null在调试模式下启用 proguard 时,当我在没有 proguard 的情况下使用时,我的应用程序在调试 mmode 中运行良好。这是我用来启用 proguard 的片段

debug{
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

这是我得到的错误日志

java.lang.NullPointerException: name is null
        at android.content.res.Resources.getIdentifier(Resources.java:3708)
        at com.byteapp.postearnmoney.b.a.a(Unknown Source)
        at com.byteapp.postearnmoney.b.a.a(Unknown Source)
        at android.support.v7.widget.RecyclerView$a.a(Unknown Source)
        at android.support.v7.widget.RecyclerView$a.b(Unknown Source)
        at android.support.v7.widget.RecyclerView$p.a(Unknown Source)
        at android.support.v7.widget.RecyclerView$p.a(Unknown Source)
        at android.support.v7.widget.RecyclerView$p.a(Unknown Source)
        at android.support.v7.widget.RecyclerView$p.c(Unknown Source)
        at android.support.v7.widget.LinearLayoutManager$c.a(Unknown Source)
        at android.support.v7.widget.LinearLayoutManager.a(Unknown Source)
        at android.support.v7.widget.LinearLayoutManager.a(Unknown Source)
        at android.support.v7.widget.LinearLayoutManager.c(Unknown Source)
        at android.support.v7.widget.RecyclerView.N(Unknown Source)
        at android.support.v7.widget.RecyclerView.onMeasure(Unknown Source)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:20236)
        at android.support.v4.widget.DrawerLayout.onMeasure(Unknown Source)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
        at android.view.View.measure(View.java:20236)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.support.v7.widget.ContentFrameLayout.onMeasure(Unknown Source)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6333)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3140)
        at android.view.View.measure(View.java:20236)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2704)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1656)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1948)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1544)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7607)
        at android.view.Choreographer$CallbackRe
05-08 18:12:58.646 24073-24535/com.byteapp.postearnmoney E/File: fail readDirectory() errno=2
    fail readDirectory() errno=2
05-08 18:13:04.586 24073-24453/com.byteapp.postearnmoney E/Ads: Fail to get isAdIdFakeForDebugLogging
    java.io.IOException: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):202)
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):20)
        at com.google.android.gms.ads.identifier.a.b(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):148)
        at com.google.android.gms.ads.internal.util.d.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):6)
        at com.google.android.gms.ads.internal.util.b.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):4)
        at com.google.android.gms.ads.internal.util.m.call(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3)
        at com.google.android.gms.ads.internal.util.n.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):189)
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):20) 
        at com.google.android.gms.ads.identifier.a.b(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):148) 
        at com.google.android.gms.ads.internal.util.d.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):6) 
        at com.google.android.gms.ads.internal.util.b.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):4) 
        at com.google.android.gms.ads.internal.util.m.call(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3) 
        at com.google.android.gms.ads.internal.util.n.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
        at java.lang.Thread.run(Thread.java:818) 
05-08 18:13:04.996 24073-24484/com.byteapp.postearnmoney E/Ads: Fail to get isAdIdFakeForDebugLogging
    java.io.IOException: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):202)
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):20)
        at com.google.android.gms.ads.identifier.a.b(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):148)
        at com.google.android.gms.ads.internal.util.d.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):6)
        at com.google.android.gms.ads.internal.util.b.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):4)
        at com.google.android.gms.ads.internal.util.m.call(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3)
        at com.google.android.gms.ads.internal.util.n.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):189)
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):20) 
        at com.google.android.gms.ads.identifier.a.b(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):148) 
        at com.google.android.gms.ads.internal.util.d.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):6) 
        at com.google.android.gms.ads.internal.util.b.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):4) 
        at com.google.android.gms.ads.internal.util.m.call(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3) 
        at com.google.android.gms.ads.internal.util.n.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
        at java.lang.Thread.run(Thread.java:818) 
05-08 18:13:05.276 24073-24495/com.byteapp.postearnmoney E/Ads: Fail to get isAdIdFakeForDebugLogging
    java.io.IOException: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):202)
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):20)
        at com.google.android.gms.ads.identifier.a.b(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):148)
        at com.google.android.gms.ads.internal.util.d.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):6)
        at com.google.android.gms.ads.internal.util.b.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):4)
        at com.google.android.gms.ads.internal.util.m.call(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3)
        at com.google.android.gms.ads.internal.util.n.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):189)
        at com.google.android.gms.ads.identifier.a.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):20) 
        at com.google.android.gms.ads.identifier.a.b(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):148) 
        at com.google.android.gms.ads.internal.util.d.a(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):6) 
        at com.google.android.gms.ads.internal.util.b.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):4) 
        at com.google.android.gms.ads.internal.util.m.call(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3) 
        at com.google.android.gms.ads.internal.util.n.run(:com.google.android.gms.dynamite_dynamitemodulesa@12529019@12.5.29 (040306-192802242):3) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
        at java.lang.Thread.run(Thread.java:818) 

标签: javaandroidnullpointerexceptionandroid-proguard

解决方案


您可能需要添加此shrinkResources true shin-code

资源收缩仅与代码收缩结合使用。在代码收缩器移除所有未使用的代码后,资源收缩器可以识别应用程序仍在使用哪些资源。当您添加包含资源的代码库时尤其如此 - 您必须删除未使用的库代码,以便库资源变得未被引用,因此可以被资源收缩器移除。


推荐阅读