【问题标题】:Unknown Source NullPointerException When Working With Expansion File使用扩展文件时出现未知源 NullPointerException
【发布时间】:2015-03-27 22:50:32
【问题描述】:

我已向我的应用程序添加了一个扩展文件,该文件直到最近都运行良好。每当打开扩展文件中的任何文件时,应用程序都会崩溃并出现 NullPointerException。但是,这只发生在从 Play 商店或 Eclipse 之外的 APK 下载应用程序时。当应用程序从 Eclipse 运行时,没有这样的问题,并且扩展中的所有文件都可以正常工作。我的堆栈跟踪有点无用,因为它告诉我问题来自未知来源。

11-29 16:23:29.477: E/AndroidRuntime(3839): FATAL EXCEPTION: main
11-29 16:23:29.477: E/AndroidRuntime(3839): Process: net.multieducator.telaviv, PID: 3839
11-29 16:23:29.477: E/AndroidRuntime(3839): java.lang.NullPointerException
11-29 16:23:29.477: E/AndroidRuntime(3839):     at net.multieducator.telaviv.be.onCreateView(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.support.v4.app.Fragment.performCreateView(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.support.v4.app.BackStackRecord.run(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.os.Handler.handleCallback(Handler.java:733)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.os.Looper.loop(Looper.java:136)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at android.app.ActivityThread.main(ActivityThread.java:5017)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at java.lang.reflect.Method.invokeNative(Native Method)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at java.lang.reflect.Method.invoke(Method.java:515)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-29 16:23:29.477: E/AndroidRuntime(3839):     at dalvik.system.NativeStart.main(Native Method)

感谢您的帮助:)

【问题讨论】:

  • 你把obb文件放在哪里了?
  • 当我上传 alpha 副本时在 Play 商店中
  • 你尝试过一些测试吗 ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(...); if(expansionFile!=null){
  • 我会尝试一下,但您知道为什么该文件仅在应用程序从 Eclipse 运行时才有效吗?是否必须进行某种验证?
  • @Evan 您将扩展文件放在项目树中的什么位置?你试过检查你的构建路径吗?我建议你使用 Android Studio,有一个文件扩展名的处理程序。

标签: android eclipse apk-expansion-files


【解决方案1】:

你没有说你是否在发布版本中使用 ProGuard,但稳定性的差异与我遇到的问题一致。

如果您的扩展文件引用了主项目中的类,ProGuard 的 minifyenabled 选项可能会混淆它们的名称。如果这些名称与扩展文件的预期不匹配,则可能会出现 NullPointerException

要尝试的事情:

  • minifyenabled 设置为false 并重新构建
  • 如果这会产生一个工作版本,请将 -keep class <your classes' package name>.** { *; } 添加到 proguard-rules.pro 文件中,这样 ProGuard 就不会混淆该包中的类和成员名称。
  • 要以与发布相同的方式构建使用 ProGuard 的开发版本,请在 build.gradle 文件中复制 release(在 buildTypes 下)并将其命名为 debug

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2020-03-29
    • 2020-02-16
    • 2022-07-23
    相关资源
    最近更新 更多