proguard hell - başvurulan sınıf bulunamıyor


125

Yani, ben TRYING bazı yazılım serbest bırakmaktan başka Proguard bana ağrıtıyor.

Proguard kullanarak dışa aktarmaya çalıştığımda çok fazla uyarı alıyorum, yani "başvurulan sınıfı bulamıyorum"

Örneğin:

[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME]          You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] java.io.IOException: Please correct the above warnings first.
[ 

Uyarılar basit çerçeve ile ilgili görünüyor, bu yüzden proguard yapılandırma dosyama aşağıdakileri ekledim:

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

pathtoprojecttolibsProjem tarafından referans verilen kavanozlara giden yol nerede .

Bu HİÇ fark yaratmaz.

Simpleframework javax'a başvuruyorsa, proguard'a bunu da görmezden gelmesini söyleyebilir miyim?

Herhangi bir fikir?


1
Proguard'ı sadece ağaç sallamak için mi kullanıyorsunuz? Öyleyse, dosya boyutunu kullanmadan kontrol ettiniz mi? Örneğin, proguard yansıma kullanılarak erişilen bir şeyi dışarı attığında süper büyük hatalar elde edebilirsiniz, örneğin çalışma süresi sona erene kadar bulamayacaksınız, bu yüzden gerçekten, gerçekten ihtiyacınız olduğundan emin olun.
alun

Gerçekten onu sadece, kolayca çalınan kodu korumaya çalışmak için mi kullanıyordum? Sence buna değer mi?
iasksillyquestions

3
@ListenToRick Proguard, uygun yapılandırmalarla çalıştırılırsa ve sonuçta ortaya çıkan uygulamanız doğru şekilde test edilirse mükemmeldir. Google'ın kullanımını tavsiye ettiğinden bile eminim. Google, Proguard'ı Android uygulamalarıyla kullanmak için birçok kılavuz / örnek sağlar.
CrackerJack9

Proguard iyi bir araçtır, ancak google en azından dex formatında oldukça tuhaf bir boyut sınırlaması nedeniyle öneriyor. (Bkz code.google.com/p/android/issues/detail?id=7147 )
alun

5
@alun, nedeni bu değil. Uygulamalarımızın tersine mühendislik uygulanmasını istemeyen veya korsanlığı önlemek için 'denemek' için lisansı kullananlar, bunun gibi bir gizleme aracı kullanmalı ve bunu bilgisayar korsanları için zorlaştırmalıdır. Uygulamanızın daha az yer kaplamasını sağlamak, son kullanıcı için de bir avantajdır ve bu araçlarla yapılan optimizasyonlar da vardır ... başka bir fayda da vardır.
Christopher Perry

Yanıtlar:


128

org.simpleframework.xml.stream.StreamReaderkodunuzda ifade eder javax.xml.stream.events.XMLEvent. İkinci sınıf Java runtime'ın ( rt.jar) bir parçasıdır ancak Android runtime'ın ( android.jar) bir parçası değildir , bu nedenle ProGuard bir şeylerin bozulabileceği konusunda uyarır. Uygulamanızın yine de çalıştığından eminseniz, şunu belirtebilirsiniz:

-dontwarn javax.xml.stream.events.**

ProGuard cehennem mi?


15
Bu benim için düzeltmedi, ancak bu düzeltildi-dontwarn javax.xml.**
Jeshurun

8
Eklemek -libraryjars <java.home>/lib/rt.jarsorunu benim için çözdü.
Gautam

3
Örneğin javax.xml.stream.XMLInputFactory hakkında ek uyarılar aldım, bu yüzden kullandım-dontwarn javax.xml.stream.**
spatialist

1
-dontwarnGUI'yi nasıl ayarlayabilirim ?
Tomáš Zato - Monica'yı eski durumuna getir

2
Proguard cehennemi devam ediyor, sadece yüzümü kapa ve bu acıyla işini bitir.
Josh


5

Bu hata, kullandığınız kitapların gerçekte kullanılmayan diğer kitaplara bağlı olması, ancak Proguard'ın onları araması nedeniyle oluşur. Bu uyarıları devre dışı bırakmak için Android projenizdeki proguard-rules.pro dosyanıza -dontwarn satırlarınızı
ekleyin .

görüntü açıklamasını buraya girin

Proguard-rules.pro'nuza hangi bağımlılıkları eklemeniz gerektiğini, hatanızın yığın izinde bulabilirsiniz.


2

Bunu Proguard yapılandırmanıza dahil etmelisiniz:

-dontskipnonpubliclibraryclasses

O zamanlar benim için yaptı ... ~ 4 yıl önce ... işler o zamandan beri değişmiş olabilir :) Yine de en az 2 kişi için çalışmış gibi görünüyordu.
CrackerJack 9

Varsayılan proguard-android.txt zaten bu satıra sahip.
Cristina De Rito

1
@Ultimecia bu taahhüt 2013'ten, bu gönderi 2011'de yapıldı
CrackerJack9

2

Arama saatlerimi çözen Magic anahtarım: Bunu progruard-android.txt dosyasına ekle

-dontskipnonpubliclibraryclassmembers

0

Hmm. Bu uyarıyı okuduğunuzda, kullanmaya çalıştığınız kitaplığın javax.xml.stream.events'e bağımlı olduğu görülür. Ad alanının aslında android'e dahil olduğunu sanmıyorum. (Bkz. Paket Dizini ).

Proguard kullanmadan öykünücüye dağıtmayı deneyin ve çalışıp çalışmadığını görün. Tahminimce bu uyarı doğruysa hayır olur.


Merhaba, emülatörde proguard olmadan çalışıyorsa, uyarıların yanlış olduğu anlamına mı geliyor? Neden bu tür benzer uyarıları aldığımı anlamaya çalışıyorum. Sadece uyarıları bastırmak istemiyorum.
Michelle Shieh

0

Bunun uç bir durum olduğunu düşünüyorum ama benim durumumda Jenkins proguard'ımdaki derleme klasörünü tamamen silmek zorunda kaldım, artık orada olmayan eski kodla çalışmaya çalıştım - sadece herhangi birinin aynı sorunu yaşaması durumunda.


0

Benim durumumda hiçbir şeyi değiştirmedim ve uyarı gelmeye başladı. Sorun, bozuk gradle önbellekleriydi. Diğer cevabımı kontrol edin . Bununla paylaşıyorum çünkü sorunu bulmam 2 saatimi aldı:]


0

Bu satırı proguard-rules.pro, gradle betikleri dizinindeki dosyanıza ekleyin :

-dontwarn package.class.name.**

package.class.nameJar dosyasının sınıf adının eklendiği paket adı burada .

Örneğin:

-dontwarn com.myexternalclass.utils.**
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.