Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo varía el tamaño de la instalación de la aplicación en el teléfono?

Hice recientemente esta aplicación para los usuarios de la raíz que modifican su dispositivo con frecuencia.

Ahora noté un comportamiento bastante extraño con el tamaño de instalación de la aplicación.

  • Android: Alineación de cuatro cuadrados
  • ¿Cómo se pone un borde alrededor de un ListView?
  • Android AudioRecord - no se inicializará segunda vez
  • Android ejecutar la función después de presionar "Enter" para EditText
  • Problema de menú emergente en Android ListView
  • Casos de uso adecuados para Android UserManager.isUserAGoat ()?
  • Cuando utilicé una actividad regular con las vistas que eran inicializadas del archivo de XML, el tamaño era 715 kb .

      @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.main_layout); executeEvents = new ExecuteEvents(this); display = (TextView) findViewById(R.id.display); powermenu = (Button) findViewById(R.id.powermenu); turnoffscreen = (Button) findViewById(R.id.turnscreenoff); mapButton = (ImageButton) findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getResources().getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); } 

    Después de cambiar a un diálogo que se creó la configuración de una vista que contenía los widgets en el archivo XML. El tamaño de la aplicación era ahora de 200kb .

     @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); //setContentView(R.layout.main_layout); LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.main_layout, null); executeEvents = new ExecuteEvents(this); display = (TextView) view.findViewById(R.id.display); powermenu = (Button) view.findViewById(R.id.powermenu); turnoffscreen = (Button) view.findViewById(R.id.turnscreenoff); mapButton = (ImageButton) view.findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getResources().getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); Dialog dialog = new Dialog(this); dialog.setContentView(view); dialog.setTitle(getResources().getString(R.string.app_name)); dialog.show(); } 

    Se redujo a 80kb cuando utilicé esto:

     @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); dialog = new Dialog(this); dialog.setContentView(R.layout.main_layout); executeEvents = new ExecuteEvents(this); display = (TextView) dialog.findViewById(R.id.display); powermenu = (Button) dialog.findViewById(R.id.powermenu); turnoffscreen = (Button) dialog.findViewById(R.id.turnscreenoff); mapButton = (ImageButton) dialog.findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); dialog.setTitle(getString(R.string.app_name)); dialog.show(); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialogInterface) { dialog.dismiss(); MainActivity.this.finish(); } }); } 

    También noté otro cambio extraño en el tamaño de la aplicación cuando intenté agregar una animación con el último estilo de código (el 80kb ). El tamaño de la aplicación se convirtió en un fuerte 1 MB . Así es como inicialicé la animación y traté de llamarla cuando se hizo clic en el botón:

     private static final ScaleAnimation animation = new ScaleAnimation(1, .95f, 1, .95f, Animation.RELATIVE_TO_SELF, (float)0.5, Animation.RELATIVE_TO_SELF, (float)0.5);//declared as global variable 

    Dentro del método onCreate:

     animation.setDuration(1000); animation.setFillAfter(false); 

    Después de lo cual lo llamé en el onClickListener :

     mapButton.startAnimation(animation); 

    ¿Por qué hay un cambio tan drástico en el tamaño de la aplicación cuando no he añadido ningún nuevo recurso, sino que solo cambió el estilo del código? ¿Dónde hay tal gran diferencia en la forma en que inicializar widgets presentes en los diálogos? ¿Por qué hay una diferencia enorme cuando agrego una animación de la manera que lo he añadido?

    Siguiente pregunta:

      @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.main_layout); executeEvents = new ExecuteEvents(this); display = (TextView) this.findViewById(R.id.display); powermenu = (Button) this.findViewById(R.id.powermenu); turnoffscreen = (Button) this.findViewById(R.id.turnscreenoff); mapButton = (ImageButton) this.findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getResources().getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); } 

    ESPECULACIÓN

    ¿Podría esto ser debido a los paquetes o clases que se importan? Tiene sentido para el bit de animation de la pregunta al menos.

    ¿Agregar el contexto al que se inicializan las vistas reduce el uso de memoria?

  • Leer archivo en android - permiso de archivo denegado
  • ¿Cómo hacer un tutorial para mi aplicación Android?
  • Crear un objeto dos veces produce resultados diferentes
  • Radio de borde con valor de porcentaje no admitido en los navegadores de Android
  • Android: OnTouch, MotionEvent.ACTION_MOVE no está reconocido?
  • Cómo aplicar un estilo de vista grande a una notificación mediante la biblioteca Parse
  • One Solution collect form web for “¿Cómo varía el tamaño de la instalación de la aplicación en el teléfono?”

    Yup, sus especulaciones están cerca de estar en lo cierto, por lo que puede saber todo su código Java primero se compila a Java bytecode por decir javac , a continuación, dx convierte en bytecode Dalvik, su dalvik bytecode archivo (aka dex ) se empaqueta dentro de su apk (El tamaño de apk de btw no varía mucho como ayuda de la compresión del cierre relámpago) generalmente como classes.dex que más adelante cuando usted instala el apk en usted dispositivo, Android pudo optimizarlo para ese dispositivo particular (aka odex ).

    Por lo tanto, para comprobar que su final en caché dex realmente cambia y es el responsable de este cambio de tamaño, por decir simplemente añadir animaciones, se puede encontrar descomprimiendo su apk o dentro de su dispositivo, siempre encuentro la segunda opción más emocionante:

    Así que aquí está su dex sin animación (su 80kb ):

    Http://i.imgur.com/2JkpWS3.png

    Y tu información de la aplicación:

    Http://i.imgur.com/HseGJih.png

    Así que aquí está su dex con la animación (su 1 MB ):

    Http://i.imgur.com/pyrthYd.png

    Y tu información de la aplicación:

    Http://i.imgur.com/FSVPWAC.png

    Una mirada más cercana usted puede encontrar que son verdaderamente diferentes apenas mirando derecho en su piscina constante de los bytecode del dalvik:

    Http://i.imgur.com/02mqaif.png

    Por alguna razón no conseguí tal diferencia radical del tamaño pero es noticiable, construí tu app usando gradle + Android Studio así que pienso que ayudan y optimizan cosas un pedacito.

    Por último, podría utilizar ProGuard pero ¡eh! Algunos k no son que mucho en estos días, no me preocuparía por añadir algo de "grasa" a su aplicación, siempre y cuando lo hace mejor, por supuesto, siempre hay espacio para la mejora, pero recuerde que no está en un java4k o cosas como eso 🙂

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.