Сглаженный код не работает - PullRequest
4 голосов
/ 18 марта 2012

У меня проблема с запутанной программой. У меня есть 2 файла:

  • client.jar
  • server.jar

Когда я использую Proguard, чтобы сжать их, он работает нормально. Но если я проверяю «оптимизировать», у меня есть NullPointerExceptions, и если я также проверяю «обфусцировать», у меня возникает InternalError в моем client.jar , когда он должен отправить объект на сервер с writeObject() метод.

Пожалуйста, можете ли вы помочь мне с настройкой Proguard (я действительно не знаю этот инструмент) или скажите мне, почему я получаю эти ошибки. Спасибо за аванс.

PS: я француз, поэтому извините, если я допустил ошибки в своих объяснениях.

Я попытался запустить свой client.jar с .bat, чтобы посмотреть, смогу ли я увидеть, что происходит, и это ошибка, которую я получаю, когда клиент должен отправить объект на сервер: enter image description here

1 Ответ

3 голосов
/ 18 марта 2012

В вопросе мало деталей, поэтому мой ответ будет очень общим, но я надеюсь, что он направит вас в правильном направлении.

Если вы задумываетесь о вызове методов, вам нужно добавить keep опции в ваш файл конфигурации. Вам необходимо keep все методы, которые когда-либо вызывались с помощью отражения (см. Сохранить параметры в руководстве).

Для сериализации в руководстве есть рецепт , который должен помочь:

-keepclassmembers,allowobfuscation class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

Варианты добавочной запутанности сохранят запутанность между клиентом и сервером; см. Этот раздел руководства Proguard.

Надеюсь, это поможет.

...