2009-06-09 10 views
1

Я использую Антенну для сборки, упаковки и обфускации приложения j2me. Строительные и упаковочные работы отлично.Устранение неполадок

Проект использует стороннюю банку, которая уже запутана, за исключением некоторых интерфейсов.

При попытке запутать я получил несколько ошибок, как:

[wtkobfuscate] Warning: i: can't find referenced class fooPackage.fooClass 

класса я и fooPackage.fooClass из этой 3-й партии банки, что я говорил.

UPDATE:

Это третья библиотека сторона использует j2me-xmlrpc.jar. Если я не упакую все вместе, то я не буду запутывать сторонние интерфейсы и j2me-xmlrpc.jar. (И я не могу запустить приложение таким образом, не знаю, почему)

Если я пакет только j2me-xmlrpc.jar и мои классы проекта я получаю эту ошибку при обфускации

[wtkobfuscate] Warning: there were 2 instances of library classes depending on program classes. 

UPDATE 2:

Я знаю, что это обфускация возможна beacause в Netbeans. Я могу делать обфускацию с помощью Proguard.

Поскольку внутренние объекты Netbeans используют ANT для создания сборок, я попытался скопировать сгенерированный файл build.xml в собственный файл build.xml.

Для обфускации Netbeans использует библиотеку org-netbeans-modules-mobility-antext.jar, которая может использоваться вне Netbeans. Я импортировал эту библиотеку в свой проект и без проблем использовал ее.

Но я получаю ту же ошибку, что и антенна.

Obfuscating в Netbeans генерирует много предупреждений, но он все еще генерирует запутанную банку.

Что мне не хватает?

+0

какой obfuscator вы используете? – Toad

+0

@reinier: Proguard 4.3 –

+0

У меня были лучшие результаты с помощью jshrink. Если вы хотите, я могу отправить вам его на тестирование. Возможно, стоит попробовать – Toad

ответ

1

Я использовал Proguard 4.3. Переход к Proguard 4.2 решил проблему.

1

Если сторонняя библиотека запутана, не включайте эту библиотеку, пока вы запутываете свои классы. Скорее всего, выполните следующих шаги

  1. Jar ваших классов в одиночку (Dont включить 3-ю библиотеку партии)
  2. Затемнение банки, полученную на стадии 1
  3. Unjar в запутанной банке, полученной на стадии 2 и библиотеку 3-й партии в каком-то темпе папка
  4. Jar все unjared классы
  5. Preverify и упаковать их снова
+0

Сторонняя библиотека содержит некоторые интерфейсы, которыми пользуются мои классы. Если я не включу их, вы не сможете создать сборку и упаковку. Есть ли способ разделить запутанные классы с интерфейсами, находящимися внутри банки? –

+0

Конечно, вы будете включать эти сторонние библиотеки в classpath цели javac во время компиляции, однако, когда вы их упаковываете, вы делаете это по-другому, как упомянуто выше, так что у обфускатора нет проблем при запутывании уже запутанных классов. Надеюсь, что это понятно, если нет, дайте мне знать – Ram

+0

Более ясно, что обфускатор снова не запутывает сторонние библиотеки. – Ram

0

попробуйте использовать jshrink. У меня есть намного лучшие результаты с ним с помощью proguard:

    <java jar="obfuscator\jshrink.exe" fork="true"> 
         <arg value="..\${projectdir}\${projectname}.jar"/> 
         <arg value="-classpath"/> 
         <arg pathref="project.class.path"/> 
         <arg value="-keep"/> 
         <arg value="${midletclass}"/> 
         <arg value="-o"/> 
         <arg value="..\${projectdir}\${projectname}.jar"/> 
        </java> 
+0

, если вы дадите мне свои электронные письма (или некоторые другие способы связи), я могу отправить вам jshrink, чтобы вы могли протестировать его – Toad

+1

@reinier, или он может его найти и найти там: http://lmgtfy.com/? д = Jshrink + –

Смежные вопросы