以前项目中也用到过,不过以前的那个WebImageView写得过于复杂,不利于以后重用。
今天要做新项目,于是在网上找了一个开源组件来使用。地址如下:
https://github.com/ZaBlanc/WebImageView
测试了一下还蛮好用的。
本来想修改修改作为公司自己的内部组件的,然后打成jar包以后重用的。可是发现打成jar包后(export ---> java (选择jar文件)),再引入之后自己的项目中之后,会出现如下的问题:
java.lang.IllegalArgumentException: already added: Lcom/xxxwidget/webimageview/cache/WebImageCache;
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main.processClass(Main.java:486)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:191)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:123)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main.processOne(Main.java:418)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.dx.command.dexer.Main.run(Main.java:206)
[2012-06-07 09:30:59 - TestWebImageView] Dx at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2012-06-07 09:30:59 - TestWebImageView] Dx at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2012-06-07 09:30:59 - TestWebImageView] Dx at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2012-06-07 09:30:59 - TestWebImageView] Dx at java.lang.reflect.Method.invoke(Method.java:597)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:180)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:702)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:646)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.resources.Project$1.run(Project.java:618)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.resources.Project.build(Project.java:124)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:978)
[2012-06-07 09:30:59 - TestWebImageView] Dx at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:147)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:854)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:703)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:937)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1141)
[2012-06-07 09:30:59 - TestWebImageView] Dx at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
[2012-06-07 09:30:59 - TestWebImageView] Dx 1 error; aborting
[2012-06-07 09:30:59 - TestWebImageView] Conversion to Dalvik format failed with error 1
这个问题,已经有很多人遇到过了,原因无非就是jar包中有多份同名文件。解决了半天也解决不了。
后来找到一个帖子:
http://www.bangchui.org/simple/?t15286.html
“这个问题解决了,是我导入jar的方式不对,不能直接把jar包放在android工程里面,要通过外部包引用的方式导入进来,就不会存在冲突了。”
可是,这跟我以前在ADT更新到15所引发的问题相冲突了。
试了一下,发现是这个样子的,可是在xml布局里面写自己的组件时,会报如下错误:
06-07 09:59:51.941: E/AndroidRuntime(4076): Caused by: java.lang.ClassNotFoundException: com.xxxwidget.webimageview.image.WebImageView in loader dalvik.system.PathClassLoader[/data/app/com.xxxx.testwebimageview-1.apk]
具体原因不详!
暂时解决方法:
把source code 放在自己的代码里,不用jar包的方式来导入。