我将jets3t链接到一个测试应用程序并获得了我在安装期间尚未看到的logcats ..
02-08 12:21:11.825: DEBUG/PackageParser(1086): Scanning package: /data/app/vmdl28891.tmp
02-08 12:21:12.059: DEBUG/PackageManager(1086): Scanning package org.jets3t
02-08 12:21:12.075: INFO/PackageManager(1086): /data/app/org.jets3t-1.apk changed; unpacking
02-08 12:21:12.082: DEBUG/installd(1009): DexInv: --- BEGIN '/data/app/org.jets3t-1.apk' ---
02-08 12:21:12.481: DEBUG/dalvikvm(26867): creating instr width table
02-08 12:21:12.715: DEBUG/dalvikvm(26867): DexOpt: 'Lorg/apache/commons/codec/Decoder;' has an earlier definition; blocking out
02-08 12:21:12.715: DEBUG/dalvikvm(26867): DexOpt: 'Lorg/apache/commons/codec/BinaryDecoder;' has an earlier definition; blocking out
02-08 12:21:12.715: DEBUG/dalvikvm(26867): DexOpt: 'Lorg/apache/commons/codec/Encoder;' has an earlier definition; blocking out
02-08 12:21:12.715: DEBUG/dalvikvm(26867): DexOpt: 'Lorg/apache/commons/codec/BinaryEncoder;' has an earlier definition; blocking out
... many more ...
'Lorg/apache/commons/logging/impl/WeakHashtable$Entry;': multiple definitions
02-08 12:21:12.973: DEBUG/dalvikvm(26867): DexOpt: not verifying 'Lorg/apache/commons/logging/impl/WeakHashtable$Referenced;': multiple definitions
02-08 12:21:12.973: DEBUG/dalvikvm(26867): DexOpt: not verifying 'Lorg/apache/commons/logging/impl/WeakHashtable$WeakKey;': multiple definitions
02-08 12:21:12.973: DEBUG/dalvikvm(26867): DexOpt: not verifying 'Lorg/apache/commons/logging/impl/WeakHashtable;': multiple definitions
02-08 12:21:13.168: INFO/dalvikvm(26867): DexOpt: not resolving ambiguous class 'Lorg/apache/commons/logging/LogFactory;'
... many more ...
02-08 12:21:13.364: INFO/dalvikvm(26867): DexOpt: not resolving ambiguous class 'Lorg/apache/commons/logging/LogFactory;'
02-08 12:21:13.387: DEBUG/libgps(1086): GpsInterface_inject_location( 37.378289, -122.059655, 897.000 )
02-08 12:21:13.387: DEBUG/dalvikvm(26867): DexOpt: load 111ms, verify 540ms, opt 21ms
02-08 12:21:13.543: DEBUG/installd(1009): DexInv: --- END '/data/app/org.jets3t-1.apk' (success) ---
02-08 12:21:13.551: INFO/ActivityManager(1086): Force stopping package org.jets3t uid=10084
02-08 12:21:13.559: DEBUG/PackageManager(1086): Activities: org.jets3t.MainActivity
02-08 12:21:13.832: INFO/installd(1009): move /data/dalvik-cache/data@app@org.jets3t-1.apk@classes.dex -> /data/dalvik-cache/data@app@org.jets3t-1.apk@classes.dex
02-08 12:21:13.832: DEBUG/PackageManager(1086): New package installed in /data/app/org.jets3t-1.apk
我正在阅读,因为共享库会覆盖。如果是的话,我想知道这是否是我做错的结果?如果我覆盖,其他应用程序可能会破坏的可能性有多大?当然,任何正确创建的库都将向后兼容..我猜Android包mgr不会取代旧版本的包?
加上“多个定义”? “没有解决暧昧的阶级”?
哦,是的..测试应用程序到目前为止似乎工作正常:)
感谢。猜猜我需要阅读pkg install,load和link lol。
答案 0 :(得分:3)
我认为,如果您更换了依赖于它的.apk,那么您在正确安全的设备上实际损坏另一个应用程序的唯一方法就是。
在我看来,更像是在安装.apk,其中包含与该设备的平台库中的某些内容复制的类。新的重复项被忽略。这并不罕见,因为平台中存在各种极具吸引力的“私有”功能,它们在sdk中没有“标题”(抱歉,错误的术语,但传达了这个想法)。这使得难以编写而不包括存根来满足编译器(或使用反射来在运行时查找实际类)。在安装时,如您所见,这些存根会被警告消息忽略。
这不一定是好的做法,但只要设备上的私有功能继续按预期工作,它就会起作用 - 也就是说,它可能会破坏操作系统升级或程序安装在不同的设备上。由于这个原因,Android人员非常执着地告诉你不要使用私有功能。
运输代码中剩余的错误/警告消息尽管它们仍然有效但也不是很好的做法,不幸的是,这是Android堆栈本身特有的东西。