2010-12-24 1 views
8

Proguard 및 외부 라이브러리 사용에 문제가 있습니다. 내 프로젝트는 오류없이 컴파일하고 실제 장치 에서 성공적으로 실행되지만 Eclipse에서 실행해야합니다. 다음 내가 "개미 해제"를 실행할 때 이 (안드로이드) Proguard에서 동적으로 참조되는 클래스 javax.swing을 찾을 수 없습니다. *

proguard.dir=/home/stoned/android-sdk-linux_86/proguard4.5.1/lib 
proguard.config=/home/stoned/workspace/Fidoo/proguard.cfg 

을 추가 "안드로이드 업데이트 프로젝트 -p를 ./"실행 내가 얻을 :

지금은 내가 다음은 않았다 그래서 난독 릴리스 버전을 만들고 싶어
... 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가 해당 라이브러리를 검색하지 않도록하려면 어떻게해야합니까?

+4

'/ home/stoned /'huh? – Nick

답변

2

음, log4j를 클래스 경로 (libs/log4j-1.2.14.jar)에 넣으십시오. 이것이 log4j가 포함 된 이유입니다. 또한 javax.swing에 대한 참조도 제공합니다.

+0

내 프로젝트는 libthrift.jar를 사용하는 외부 라이브러리를 사용하며, libthrift.jar는 log4j를 사용합니다. 그래서 나는 단순히 log4j를 제거 할 수 없다. 게다가 컴파일러는 존재하지 않는 libs에 대해 불평하지 않습니다 (코드에서 사용되지 않았기 때문에 저는 믿습니다).하지만 프로 가드는 – Renat

+0

을 참조하십시오. 그럼에도 불구하고 이것은 응용 프로그램의 런타임 동작에 전혀 영향을 미치나 (Proguard가 코드를 완전히 최적화하지 못할 수도 있음)? –

+0

apk를 전혀 만들지 않습니다. 그냥 BUILD FAILED라고 쓰십시오. /home/stoned/android-sdk-linux_86/tools/ant/main_rules.xml:430 : 위의 경고를 먼저 수정하십시오. – Renat

6

신경 끄시 고, 그냥 스윙 종속성이없는 log4j에의 어떤 버전이없는 경우

19

을 proguard.cfg하는

-dontwarn 
-dontnote 

을 추가, 당신은 쉽게에서 항아리에 필터를 추가 할 수없는 경우 빌드 프로세스, 깨끗한 솔루션은 proguard.cfg 단지이 특별한 경고를 전환하는 것입니다 :

-dontwarn org.apache.log4j.lf5.viewer.** 
-dontnote org.apache.log4j.lf5.viewer.** 

당신은 다음 여전히 관련이있을 수있는 다른 경고를 얻을 것이다.