Używam najnowszego zestawu SDK systemu Android (4.1) i próbowałem wyeksportować podpisany plik jar z włączoną opcją Proguard. Jednak po dekompilacji zoptymalizowanego pliku APK zauważyłem, że metody, które oczekiwałbym, że zostaną wstawione, nie były.Android Proguard nie jest wbudowany
Wiem, że Proguard działał, ponieważ kod został poprawnie zaciemniony. Tak, aby to potwierdzić, dodałem tę metodę do mojego działalność:
private void testInlining()
{
mConfig = null;
}
Ta prywatna metoda jest wywoływana tylko raz w mojej działalności, a ponieważ jest prywatny, powinno być oczywiste dla optymalizatora, że jest ona wywołana tylko raz i to powinno być zaznaczone.
Dokumentacja mówi, że wszystkie optymalizacje są domyślnie włączone, a Proguard "Metody śródliniowe, które są krótkie lub wywoływane tylko raz".
Czy istnieje konkretna flaga, którą powinienem dać Proguard, aby umożliwić wstawianie?
EDIT
Mój plik konfiguracyjny PROGUARD zawiera
-optimizationpasses 5
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses
EDIT
Po użyciu
-whyareyoukeeping class com.templatecompany.templateappname.EntryPointActivity {*;}
pojawia się powód, dla którego metoda ta nie jest inlined:
[proguard] com.templatecompany.templateappname.EntryPointActivity: void testInlining() (20:21)
[proguard] is invoked by com.templatecompany.templateappname.EntryPointActivity: com.td.media.ivConnection.IvConfig getIvConfig() (14:15)
[proguard] implements com.td.widget.MainActivity: com.td.media.ivConnection.IvConfig getIvConfig()
[proguard] is invoked by com.td.widget.MainActivity: void onCreate(android.os.Bundle) (140:175)
[proguard] implements android.app.Activity: void onCreate(android.os.Bundle)
[proguard] is a library method.
Ale nie jestem pewien, w jaki sposób fakt, że metoda testInlining
jest stosowany w metodzie getIvConfig
który jest z kolei używany przez inną metodą zapobiega wstawianiu na testInlining
w testInlining
w testInlining
.
Próbowałeś tego? -optimizationpasses 5 Więcej na http://stackoverflow.com/questions/5068251/android-what-are-the-recommended-configurations-for-proguard?rq=1 – user1154664
Gdyby rzeczywiście w stanie uzyskać ProGuard wykonać wywołanie metody inline? Korzystając z proguard-android-optimize.txt i pisząc prostą prywatną metodę, która zwraca int, nie mogłem zobaczyć, jak działa: http://paste.ofcode.org/hbpzPe4EdAnDGnNqNTE7c3 – brAzzi64