2012-09-27 28 views
8

'u kullanarak Google uygulama motoruna bir web uygulaması dağıttım ve web servisim forma 1.14 çerçevesini kullanıyor. GAE'de web servislerini tüketmeye veya çağırmaya çalıştığımda bir java.lang.IncompatibleClassChangeError: Implementing sınıfı elde ediyorum. 1.14 numaralı jampa ve google uygulama motorunun asm 4.0'ı kullandığını ve bu sorunu çözmek için bağımlılıkları paketlemek için JarJar'ı kullanmak zorunda olduğumu fark ettiğimi fark ettim ve bunun nasıl yapılacağına dair bir ipucum yok. JarJar ile. Bulduğum öğretici çok şifreli ve deneyim programcılarına yönelik olarak tasarlandı. Birisi, yeni başlayanlara yönelik bir eğitici yayınlayabilir veya bu sorunu çözmek için adım adım ilerleyebilir.JarJar yeniden paketleme aracı

cevap

0

Kavanoz dosyalarını ayıklamak ve birleştirmek için jdk jar komutunu kullanabilirsiniz. firstjar.jar .... akıllıca -COM/pak1/Pak2
Şimdi aynı özü ikinci kavanoz kavanoz sınıfları klasör/paket ayıklamak ve
Hayır bir oluşturabilir genişletilmiş klasörler hem birleştirir -xvf
kavanoz birleştirilmiş sınıf dosyalarının tek bir kavanoz.
jar -cvf mergedjar.jar [klasörler adı [ex com org ...], ayrıntılar için jar komutlarının nasıl çalıştığını kontrol edin.

+0

Bu tam olarak nitelenmemiş adla çalışma zamanı sınıfları çakışacak çünkü bu yardımcı olmaz. _Jarjar_, sadece kavanozları birleştirmekten daha fazlasını yapıyor. Yine de başımı yine de kendim almam gerekiyor. – vadipp

9

Bu oldukça geç bir cevaptır, ancak biri tarafından kesişirse yardımcı olabilir. Bir örnek alacağım ve bunu açıklayacağım. jarjar java kütüphanelerini yeniden paketlemek için kullanılabilir. ad alanını değiştirmek için kullanılabilir, örneğin org.apache.common.codec'in bazı_random_name.org.apache.common.codec olarak değiştirilmesi gerekiyor. Bu çizgileri

rule org.apache.commons.codec.** [email protected] 

çıkış myoutjar.jar olacak eklemek myrules.txt bu komutu java -jar jarjar-1.4.jar process myrules.txt myinjar.jar myoutjar.jar en geç bir klasöre kavanoz Eğer (myinjar.jar) değiştirmek istediğiniz dosyayı ve indirilen Jar Jar yapıştırın jarjar download site gelen Jar Jar indirip çalıştırın aynı klasöre kaydedilir ve herhangi bir çakışma olmadan projenizde kullanabilirsiniz

+0

Sözdizimi hatası alıyorum: Giriş kavanoz girişleri: META-INF/LICENSE.txt' –

+0

gikarasojo belki bu [link] (http://stackoverflow.com/questions/31912459/duplicate-lib-file-copied-in-apk -meta-inf-lisans-txt-hata-in-andorid-studio) –

+0

yardımcı olabilir Ben bir şekilde karmaşık bir durum var. Ben bir kütüphane 'm.jar' sağlanan bazı işlevleri kullanmak istiyorum Bu kütüphane' javax' içinde bulunan bir sınıf 'BindingProvider' kullanmak gerektirir ama android değildir. bu yüzden 'android-ws-combine.jar' adlı başka bir kavanoz indirmek zorunda kaldı. modülümde eklediğimde ve onu çalıştırmaya çalıştığımda, "Hata: hata işleme" javax/xml/XMLConstants.class ":' hatasını aldım. Ben yeniden paketleme "android-ws-combine.jar" yardımcı olacağını düşündüm ama benim diğer jar 'm.jar' da javax.BindingProvider' bulamadı çünkü bazı hataları atar çünkü ben javax 'paketi ne zaman repa –