Estoy usando el último Android SDK (4.1) e intenté exportar un jar firmado con Proguard habilitado. Sin embargo, después de descompilar la APK optimizada, noté que los métodos que esperaba que estuvieran incluidos no lo eran.Android Proguard no está en línea
Sé que Proguard se ejecutó porque el código estaba ofuscado correctamente. Así que para confirmar esto, añadí este método a mi Actividad:
private void testInlining()
{
mConfig = null;
}
Este método privado se llama una sola vez en mi actividad, y porque es privada, debería ser muy evidente para el optimizador que sólo se llama una vez y que debe estar en línea.
La documentación dice que todas las optimizaciones están habilitadas por defecto, y que Proguard "Métodos en línea que son cortos o solo se llaman una vez".
¿Hay alguna bandera específica que le deba dar a Proguard para habilitar la alineación?
EDITAR
Mi fichero de configuración contiene Proguard
-optimizationpasses 5
-allowaccessmodification
-overloadaggressively
-repackageclasses ''
-dontskipnonpubliclibraryclasses
EDITAR
Después de usar
-whyareyoukeeping class com.templatecompany.templateappname.EntryPointActivity {*;}
tengo la razón por la cual no se colocarán en línea el método:
[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.
pero no estoy seguro de ver cómo el hecho de que el método testInlining
se utiliza en el método getIvConfig
que a su vez utilizado por otro método previene la alineación en testInlining
en getIvConfig
.
¿Has probado esto? -optimizationpasses 5 Más sobre http://stackoverflow.com/questions/5068251/android-what-are-the-recommended-configurations-for-proguard?rq=1 – user1154664
que en realidad eran capaces de obtener Proguard hacer que cualquier método llame en línea? Usando proguard-android-optimize.txt y escribiendo un método privado simple que devuelve un int, no pude ver que funcionara: http://paste.ofcode.org/hbpzPe4EdAnDGnNqNTE7c3 – brAzzi64