falstaf
@falstaf

Android, SimpleXML, ProGuard?

Имеется проект, использующия для разбора XML библиотеку SimpleXML (simple.sourceforge.net), которая для разметки схемы класса использует Java-аннотации.

Потребовалось провести обфускацию проекта посредством ProGuard, после обфускации все работает успешно, за исключением классов разбора XML. Возникает исключение NoSuchMethodException.

Логично предположить, что проблема в обфусцировании ProGuard'ом аннотаций и их классов, однако упорное чтение документации ProGuard'а и манипуляции с опциями обфускации к желаемому результату не привели.


Если у кого-нибудь есть опыт решения подобной проблемы, был бы весьма признателен любой помощи.
  • Вопрос задан
  • 5065 просмотров
Пригласить эксперта
Ответы на вопрос 3
megatron
@megatron
Попробуй так:
-keep class com.simpleframework.** { *; }
Ответ написан
mgarin
@mgarin
Вряд ли я буду сильно полезен, но имел дело с yGuard (у них возможностей и опций как мне известно поменьше чем у ProGuard) — там все подобные вещи настраиваются для отдельных пакэджей или классов. Или же глобально — например «не обфусцировать статические методы», «не обфусцировать имена методов» и т.д.

Примерно вот так выглядят настройки (прямо в билд-скрипте):
  <target name="obfuscate">
    <taskdef name="yguard" classpath="installer/obfuscate/yguard.jar"
         classname="com.yworks.yguard.YGuardTask" />

    <yguard>
      <inoutpair in="dist/guidesigner.jar" out="dist/guidesigner-sec.jar" />

      <externalclasses>
        <path refid="obfuscate-process-path" />
      </externalclasses>

      <rename mainclass="com.alee.designer.app.Designer" logfile="dist/obfuscation.log">
        <!--<property name="error-checking" value="pedantic"/>-->

        <keep>
          <class implements="com.alee.designer.NonObfuscable" fields="private" />
          <class name="com.alee.designer.app.dialogs.pixelgrabber.PixelGrabber"
              methods="public" />
          <class name="com.alee.designer.viewer.DesignerViewer" methods="public" />
        </keep>
      </rename>
    </yguard>

  </target>

Тут, конечно, не всё, но думаю общая идея должна быть ясна.

То что находится между «keep» — как раз исключаемые из обфускации вещи.
Мы немного схитрили, конечно — сделали отдельный интерфейс NonObfuscable — всё что его имплементит автоматически исключается из обфускации (по крайней мере имена методов и переменных) и позволяет в итоге пользоваться классами для сохранения данных в XML.

Надеюсь это хоть как-то Вам поможет.
Ответ написан
@dimazaur
у меня все заработало так:

-libraryjars lib/simple-xml-2.6.2.jar
-libraryjars lib/httpmime-4.1.2.jar

-dontwarn javax.xml.stream.**

-keep class com.mypackages.**{ *; }
-keep class org.**{ *; }

-keepattributes *Annotation*
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы