Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Proguard不断破坏已签名的APK_Java_Android_Eclipse_Proguard - Fatal编程技术网

Java Proguard不断破坏已签名的APK

Java Proguard不断破坏已签名的APK,java,android,eclipse,proguard,Java,Android,Eclipse,Proguard,我有一个项目,它在从eclipse运行时运行良好,但在由签名的APK安装时运行不好 此项目使用一些库: Pulltorefresh 通用图像加载器 android支持v4(JAR) gson(JAR) youtubeandroidplayerapi(罐) 我不想让proguard接触任何这些库,因此我在proguard-project.txt中使用: -libraryjars libs -keep class com.handmark.pulltorefresh.library.** { *;

我有一个项目,它在从eclipse运行时运行良好,但在由签名的APK安装时运行不好

此项目使用一些库:

  • Pulltorefresh
  • 通用图像加载器
  • android支持v4(JAR)
  • gson(JAR)
  • youtubeandroidplayerapi(罐)
  • 我不想让proguard接触任何这些库,因此我在proguard-project.txt中使用:

    -libraryjars libs
    
    -keep class com.handmark.pulltorefresh.library.** { *; }
    -keep interface com.handmark.pulltorefresh.library.** { *; }
    -keep class com.nostra13.universalimageloader.** { *; }
    -keep interface com.nostra13.universalimageloader.** { *; }
    
    -keep class android.support.v4.app.** { *; }
    -keep interface android.support.v4.app.** { *; }
    -keep class com.google.** { *; }
    -keep interface com.google.** { *; }
    
    这是我的
    项目。属性

    proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
    
    这些proguard代码可以工作,因为我添加它们后生成的APK的大小更大。然而,当我从已签名的APK安装它时,该项目仍处于崩溃状态

    我试图通过这样做来发现发生了什么:

    retrace.bat -verbose mapping.txt dump.txt
    
    之后,我的
    cmd
    疯狂地输出了一些东西,但我不知道错误在哪里

    请帮帮我,我刚开始前进。提前谢谢

    编辑 对不起,伙计们,我说的“破坏”是指我的列表视图不显示任何数据/项目…永远加载。毫无例外。

    Grouguard keep语句 Keep语句是一种告诉Proguard保留代码位的方法,即使它们不是直接从应用程序代码调用的。一个很好的例子是main活动
    活动
    。它不是从代码中调用的,但是您仍然需要将其保留在最终的包中,并且不要更改其名称

    这些是您配置的唯一keep语句吗?如果是真的,你就缺少一些基本的。以下是最低限度Android配置的基本示例(第7节):

    回溯 回溯是一种重新创建堆栈跟踪的方法

    所以首先我们需要你崩溃的堆栈跟踪。在设备/模拟器上运行APK并获取崩溃异常和堆栈跟踪。它应该类似于:a.b.m.a()上的NullPointerException。 使用GUI回溯(更容易使用)获得实际的堆栈跟踪,然后您可以转到原始代码并尝试调试崩溃

    反思与前瞻 Proguard破坏流的一个常见原因是需要将反射通知Proguard。例如,来自布局XML的方法调用是通过反射完成的,但是由于没有来自代码本身的调用,Proguard不知道它拥有保留相关方法的权限

    有关此主题的更多信息,请参阅此问题:


    如果您想排除反射问题,我建议您首先禁用Proguard代码收缩:。

    Define“当我从已签名的APK安装项目时,项目仍在中断”。你有例外吗?如果是,什么例外?如果您希望so社区为您调试问题,至少提供错误详细信息(日志、堆栈跟踪等)。“现在看来,这是一条很宽的路。”OlegEstekhin我试过使用retrace.bat,但错误在哪里?Thanks@Michael完成,请查看我编辑的问题。没有任何例外。对不起,我修改了我的答案。谢谢。我还使用SDK中存储的默认proguard配置。对于回溯,您是指使用logcat吗?我的日志中没有错误,GUI回溯在哪里?GUI:proguard.sourceforge.net/manual/GUI.htmlLogcat应该声明崩溃。你过滤掉什么了吗?