(Android) Proguard не может найти динамически ссылочный класс javax.swing. *
У меня проблема с Proguard и использование внешних библиотек. Мой проект компилируется без ошибок и успешно запускается на реальном устройстве,
но только когда я запускаю его из Eclipse. Теперь я хочу сделать запутанную версию выпуска, поэтому я сделал следующее:
запущен "проект обновления Android -p./"
добавлено
proguard.dir=/home/stoned/android-sdk-linux_86/proguard4.5.1/lib
proguard.config=/home/stoned/workspace/Fidoo/proguard.cfg
когда я запускаю "ant release", я получаю следующее:
... skipped many irrelevant messages ...
-obfuscate:
[mkdir] Created dir: /home/stoned/workspace/Fidoo/bin/proguard
[jar] Building jar: /home/stoned/workspace/Fidoo/bin/proguard/original.jar
[proguard] ProGuard, version 4.4
[proguard] ProGuard is released under the GNU General Public License. The authors of all
[proguard] programs or plugins that link to it (com.android.ant, ...) therefore
[proguard] must ensure that these programs carry the GNU General Public License as well.
[proguard] Reading input...
[proguard] Reading program jar [/home/stoned/workspace/Fidoo/bin/proguard/original.jar]
[proguard] Reading program jar [/home/stoned/workspace/Fidoo/libs/exapi-1.16.jar]
[proguard] Reading program jar [/home/stoned/workspace/Fidoo/libs/libthrift.jar]
[proguard] Reading program jar [/home/stoned/workspace/Fidoo/libs/log4j-1.2.14.jar]
[proguard] Reading library jar [/home/stoned/android-sdk-linux_86/platforms/android-4/android.jar]
[proguard] Initializing...
[proguard] Warning: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNodeRenderer: can't find superclass or interface javax.swing.tree.DefaultTreeCellRenderer
[proguard] Warning: org.apache.log4j.lf5.viewer.categoryexplorer.TreeModelAdapter: can't find superclass or interface javax.swing.event.TreeModelListener
[proguard] Warning: org.apache.log4j.lf5.viewer.LogBrokerMonitor$32: can't find superclass or interface java.awt.event.ActionListener
[proguard] Warning: org.apache.log4j.lf5.viewer.LogBrokerMonitor$31: can't find superclass or interface java.awt.event.ActionListener
... skipped many lines of similar messages ...
[proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
[proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
[proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
[proguard] Note: org.apache.log4j.lf5.viewer.categoryexplorer.CategoryAbstractCellEditor: can't find dynamically referenced class javax.swing.event.CellEditorListener
[proguard] Note: org.apache.log4j.spi.LocationInfo: can't find dynamically referenced class com.ibm.uvm.tools.DebugSupport
[proguard] Note: there were 5 unresolved dynamic references to classes or interfaces.
[proguard] You should check if you need to specify additional program jars.
[proguard] Warning: there were 1656 unresolved references to classes or interfaces.
[proguard] You may need to specify additional library jars (using '-libraryjars'),
[proguard] or perhaps the '-dontskipnonpubliclibraryclasses' option.
Очевидно, javax.swing. классы не нужны в приложениях Android, а также в классах log4j. Как заставить proguard не искать эти библиотеки?
Ответы
Ответ 1
Если версия log4j отсутствует без зависимостей Swing, и если вы не можете легко добавить фильтр в банку в процессе сборки, самым чистым решением является отключить именно эти конкретные предупреждения в proguard.cfg:
-dontwarn org.apache.log4j.lf5.viewer.**
-dontnote org.apache.log4j.lf5.viewer.**
Затем вы будете получать любые другие предупреждения, которые могут быть релевантными.
Ответ 2
Nevermind, просто добавил
-dontwarn
-dontnote
to proguard.cfg
Ответ 3
Ну, вы поместите log4j в свой путь к классам (libs/log4j-1.2.14.jar). Вот почему включен log4j. Он также тянет ссылки на javax.swing.