我使用的是最新的Android SDK(4.1),我尝试导出一个签名的jar启用Proguard的。 然而,反编译优化APK后,我发现,我没有料想到会被内联方法则没有。
我知道,Proguard的跑,因为代码正确混淆。 因此,为了证实这一点,我加入这个方法我的活动:
private void testInlining()
{
mConfig = null;
}
这家私人方法在我的活动只调用一次,因为它是私有的,它应该是很明显的是它被称为只有一次,它应该被内联优化。
文档说所有的优化是默认启用的,而Proguard的“内联方法是短期或只调用一次”。
有没有我应该给ProGuard的,以使内联一个特定的标志?
编辑
我ProGuard的配置文件中包含
-optimizationpasses 5
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses
编辑
使用后
-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
。