Şu anki projemizde Android Studio 0.6.1 Gradle eklentisi 0.11. + Kullanıyoruz ve biz de commons-codec
numaralı telefondan bağımlılık sorunu yaşıyoruz. Biz kod aşağıdaki iki satırı kullanan bir "kripto" hizmetini içeren yerel Artifactory örneğinden bir bağımlılık sınıfında çekiyoruz: sorundurBase64 bağımlıları sorunu Android Studio içinde
byte[] encryptedOutput = cipherFactory.getEncryptCipher().doFinal(plaintext.getBytes());
byte[] encryptedCipherText = Base64.encodeBase64URLSafe(encryptedOutput);
biz commons-codec
belirli bağımlılığını tanımlamak bile bizim Gradle yapılandırma, biz ilk başta
java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafe
, el ': commons-codec'i: commons-codec'i 1.9' için bir bağımlılık dahil edildi aşağıdaki istisna olsun, ama Android Studio göre ben koduna detaya zaman IDE'de, 1.9'da bu yöntemin sürümüne bakıyor, ancak uygulama çalıştırıldığında istisna oluyor. Bu metot kullanıma girdiğinde Javadocs'a göre bile bağımlılığı 1.4'e çevirmek bile başarısız oluyor. Manuel bağımlılığın tamamen kaldırılması bile aynı şeyin gerçekleşmesine neden olur.
Çalışan uygulamanın bu bağımlılığı nereden aldığını öğrenmenin bir yolu var mı? Bu anda bizim tam bağımlılık listesi ve ben Korkum bu sınıf Android SDK ile bir yere gömüldü olmasıdır bu
compile files('libs/HockeySDK-3.0.2.jar')
compile files('libs/PushIOManager.jar')
compile 'commons-lang:commons-lang:[email protected]'
compile 'org.codehaus.jackson:jackson-core-asl:[email protected]'
compile 'org.codehaus.jackson:jackson-mapper-asl:[email protected]'
compile 'com.google.android.gms:play-services:4.4.52'
compile 'com.mcxiaoke.volley:library:1.0.4'
compile 'fr.avianey:facebook-android-api:[email protected]'
compile 'javax.validation:validation-api:1.0.0.GA'
herhangi birinden commons-codec
bulamıyor ve biz geçersiz kılmak için bir yol olacak kütüphanemizi kullanmamıza izin verecek bir commons-codec
versiyonunu kullanmak. Bunu yapabilseydik bile, endişeliyim ki Android'in kendisiyle ilgili bazı temel sorunlara neden olabilir. Uygulamamız içine çekilen bu şifreleme hizmeti sınıfının kaynağına (ve şu anda) sahip olabiliriz ve uygun eşdeğerini kullanması için onu değiştirebiliriz, ancak bu, bir veya diğer sürüme herhangi bir değişiklik yaptığımız zaman, saklamak zorunda kalacağımız anlamına gelir. onları senkronize.
Herhangi bir fikrin var mı?
GÜNCELLEME: Bu özel durumda çalışılan, Gradle derleme dosyalarındaki bağımlılıkları taramaktır ve aradığınız bağımlılık bulunduğunda, geçersiz kılmak kullanmak istediğiniz sürümle ilgilidir. Örneğin:
def versionOverrides = [
"commons-codec:commons-codec": "1.9",
]
subprojects {
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def overrideVersion = versionOverrides[details.requested.group + ":" + details.requested.name]
if (overrideVersion != null && details.requested.version != overrideVersion) {
logger.info "Overriding dependency ${details.requested.group}:${details.requested.name} version ${details.requested.version} --> $overrideVersion"
details.useVersion overrideVersion
}
}
}
}
Not bağımlılıkları 'deneyin –