Может ли библиотека, которую я использую в моем приложении Android .apk, конфликтовать с той библиотекой, которая используется в другом приложении? - PullRequest
4 голосов
/ 08 февраля 2011

Я связал jets3t в тестовом приложении и получил логи, которых я еще не видел во время установки ..

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 lol.

1 Ответ

3 голосов
/ 08 февраля 2011

Я считаю, что единственный способ, которым вы на самом деле повредите другое приложение на должным образом защищенном устройстве, - это если вы замените .apk, от которого это зависит.содержит классы, которые дублируют некоторые из библиотек платформы этого устройства.Новые дубликаты игнорируются.Это не редкость, поскольку в платформе есть множество очень привлекательных «приватных» функций, у которых нет «заголовков» (извините, неверный термин, но передает идею) в SDK.Это затрудняет писать без включения заглушек для удовлетворения компилятора (или использования отражения для поиска реальных классов во время выполнения).Во время установки эти заглушки игнорируются с предупреждающими сообщениями, которые вы видите.

Это не обязательно хорошая практика, но она имеет тенденцию работать, пока частная функциональность на устройстве продолжает работать, как и ожидалось - т.е.он может сломаться при обновлении ОС или при установке программы на другое устройство.Люди из Android довольно настойчиво советуют вам не использовать личную функциональность по этой причине.

Сообщение об ошибке / предупреждение, оставшееся в отгрузочном коде, которое работает, несмотря на их, также не является хорошей практикой и, к сожалению, является чем-то действительно эндемичным для самого стека Android.

...