2017-09-18 37 views
6

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

+0

Neden böyle bir "nifty trick" 'e ihtiyaç duyduğunuzu açıklayabilir misiniz? Kullanım durumunuz nedir? – larsgrefer

+0

@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. –

+0

Bu bir android soru mu? –

cevap

2

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

  1. boru jdeps çıktı: Eğer kabuk komut dosyalarını çalıştıran daha rahat değilseniz

    aşağıdakileri yapabilirsiniz saklamak istiyorsunuz (classname_regex oluşturmak için sıfır uzunluktaki onaylamaları kullanabilirsiniz).gibi bir şey grep ait

  2. boru çıkışı:

    awk '{print "-keep class " $0}

    ... proguard yapılandırma almak ve dosyaya çıktı kaydedin.

+1

Mükemmel değil ama jdeps ile çalışabiliyordum (ki daha önce bilmediğim varlık). Teşekkürler –