Ben yapıya sahip varsayalım tutmak? Yani aynı zamanda dahili olarak B
, C
ve Clazz
tarafından başvurulan tüm sınıflar?Proguard, tüm başvurulan sınıflar
cevap
Sadece proguard ile bunu yapabileceğinizi sanmıyorum ve gerçekten bunun için mvn \ gradle \ sbt \ ile basit bir çözüm (kullanabileceğiniz eklenti) olduğundan şüphe duyuyorum.
Yapmanız sırasında kod veya kabuk komutlarını çalıştırmakta yarar vardır. Bazı yapı taşlarını tavsiye edebilirim, ancak bunları bir araya getirmeniz gerçekten projenizi nasıl oluşturduğunuza bağlı olduğundan onlara nasıl yapıştırılacağına dair temel önerilerde bulunabilirim birlikte.
genel bir fikir: ilgi derlenmiş .class
dosyalarından (geçişli dahil)
(1) Kullanım jdeps (parçası ve jdk ile dağıtılan) getirilemedi bağımlılıkları. (-keep
için sınıflarının listesi)
jdeps -v -R -e "root_package.*" some.class
(2) kapmak jdeps
çıkışı ve proguard yapılandırma haline dönüştürmek: (root_package
ile sınırlıdır) some.class
yinelenen bağımlılıkları çıkışı Senin durumunda
gibi bir şey olmalı .
(3) (2) 'de oluşturduğunuz ana proguard yapılandırma dosyasında include yapılandırma dosyasında.
Adım (2) çoğu bacağın kullanılmasını gerektirir ve farklı şekilde yaklaşılabilir.
Benim önerim, yapı sisteminizin jdeps
'u çalıştırması ve çıktı dönüşümü yapması gereken komut dosyalarını kullanabilmesidir. Örneğin, Maven'in plugin that allows groovy scripts to be executed numaralı ürünü vardır. ...
grep -Po classname_regex
yalnızca sınıf isimleri tutmak için: gibi bir şey
boru
jdeps
çıktı: Eğer kabuk komut dosyalarını çalıştıran daha rahat değilsenizaşağıdakileri yapabilirsiniz saklamak istiyorsunuz (
classname_regex
oluşturmak için sıfır uzunluktaki onaylamaları kullanabilirsiniz).gibi bir şeygrep
aitboru çıkışı:
awk '{print "-keep class " $0}
... proguard yapılandırma almak ve dosyaya çıktı kaydedin.
Mükemmel değil ama jdeps ile çalışabiliyordum (ki daha önce bilmediğim varlık). Teşekkürler –
Neden böyle bir "nifty trick" 'e ihtiyaç duyduğunuzu açıklayabilir misiniz? Kullanım durumunuz nedir? – larsgrefer
@larsgrefer Elbette, proguard'da tutmam gereken sınıfın doğru koruma kuralına sahip olduğunu doğrulayan bir araç oluşturuyorum. A sınıfı için tek bir kuralın varlığını doğrulamak, başvurulan tüm sınıfları el ile tanımlamaktan ve bunların tümü için kural varlığını doğrulamaktan daha kolay olacaktır. –
Bu bir android soru mu? –