在Android 1.6上使用Google Guava

我在Android应用程序中使用Guava r09库,但是当我在1.6版本中使用它时出现以下错误。 这有点奇怪,因为它在1.5中正常工作。 此外,“找不到”的方法非常清楚。 我也试过包括jsr305.jar文件,但这仍然无法正常工作。

感谢任何帮助,做Java的I / O是如此痛苦没有番石榴。

这是代码:

String timestamp = CharStreams.toString( CharStreams.newReaderSupplier(timestampFile, Charset.forName("UTF-8"))); 

这是例外:

 05-08 12:16:41.163: ERROR/dalvikvm(335): Could not find method com.google.common.io.LineReader.<init>, referenced from method com.google.common.io.CharStreams.readFirstLine 05-08 12:16:41.163: WARN/dalvikvm(335): VFY: unable to resolve direct method 6798: Lcom/google/common/io/LineReader;.<init> (Ljava/lang/Readable;)V 05-08 12:16:41.163: WARN/dalvikvm(335): VFY: rejecting opcode 0x70 at 0x0009 05-08 12:16:41.163: WARN/dalvikvm(335): VFY: rejected Lcom/google/common/io/CharStreams;.readFirstLine (Lcom/google/common/io/InputSupplier;)Ljava/lang/String; 05-08 12:16:41.163: WARN/dalvikvm(335): Verifier rejected class Lcom/google/common/io/CharStreams; 05-08 12:16:41.163: DEBUG/AndroidRuntime(335): Shutting down VM 05-08 12:16:41.163: WARN/dalvikvm(335): threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 05-08 12:16:41.173: ERROR/AndroidRuntime(335): Uncaught handler: thread main exiting due to uncaught exception 05-08 12:16:41.183: ERROR/AndroidRuntime(335): java.lang.VerifyError: com.google.common.io.CharStreams at com.triposo.droidguide.rometest.LocationStoreInstaller.install(LocationStoreInstaller.java:33) at com.triposo.droidguide.rometest.SplashActivity.onStart(SplashActivity.java:58) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1205) at android.app.Activity.performStart(Activity.java:3520) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2373) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) at android.app.ActivityThread.access$2100(ActivityThread.java:116) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4203) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) at dalvik.system.NativeStart.main(Native Method) 

Related of "在Android 1.6上使用Google Guava"

我终于设法解决了这个问题。 如果我使用jarjar将com.google.common.io.LineReader重命名为另一个软件包名称(例如com.triposo.vendor.com.google.common.io.LineReader),则可以使用它! 我的猜测是,LineReader捆绑在Android中,但有一个稍微不同(不兼容)的版本。

这就是为什么使用无证的Android API调用不好的原因。 CharStreams从来不是Android API的一部分(你没有看到在1.6更新日志中提到它的删除)。

没有文档的类或方法可能会在没有任何操作系统修订的情况下消失,就像它发生在这里一样。