Android Proguard не встроен
Я использую последнюю версию Android SDK (4.1) и попытался экспортировать подписанный флягу с включенной Proguard. Однако после декомпиляции оптимизированного APK я заметил, что методы, которые я ожидал встроить, не были.
Я знаю, что Proguard работал, потому что код был правильно запутан. Чтобы подтвердить это, я добавил этот метод в свою активность:
private void testInlining()
{
mConfig = null;
}
Этот закрытый метод вызывается только один раз в моей деятельности, и поскольку он является закрытым, оптимизатору должно быть совершенно очевидно, что он вызывается только один раз и что он должен быть встроенным.
В документации говорится, что все оптимизации включены по умолчанию, и что встроенные методы Proguard "являются короткими или вызываются только один раз".
Есть ли определенный флаг, который я должен дать Proguard для включения встраивания?
EDIT
Мой конфигурационный файл Proguard содержит
-optimizationpasses 5
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses
EDIT
После использования
-whyareyoukeeping class com.templatecompany.templateappname.EntryPointActivity {*;}
Я получаю причину, почему метод не встроен:
[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.
Но я не уверен, как увидеть тот факт, что методtestInlining
используется в методеgetIvConfig
который в свою очередь используется другим методом, предотвращает встраиваниеtestInlining
вgetIvConfig
.