Archivado tamaño de archivo APK muy grande – Xamarin.Android

Después de archivar mi aplicación, mi tamaño de apk es 71.82MB (tamaño de tienda de aplicaciones estimado). No hay muchas imágenes también en mi aplicación también.

También, fijé mi vinculador a No enlace cuál es la única opción que trabaja para mí. Es demasiado grande para los usuarios. Cuando establezco enlazador a ensamblados del acoplamiento SDK solamente y también enlace todos los ensamblajes , consigo un error del código de la salida 1 de java.

¿Son los pasos que podría seguir para reducir el tamaño de mi apk por favor?

** Donde falla la aplicación **

Variables de entorno pasadas a la herramienta:

PROGUARD_HOME=/Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/mandroid/proguard /usr/bin/java -jar /Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/mandroid/proguard/lib/proguard.jar -include /Users/emmnock/AndroidStudioProjects/android-sdk-macosx//tools/proguard/proguard-android.txt -include obj/Release/proguard/proguard_xamarin.cfg -include obj/Release/proguard/proguard_project_references.cfg -include obj/Release/proguard/proguard_project_primary.cfg -include proguard.cfg -include obj/Release/XbdMerge/proguard/00d975c90.txt -include obj/Release/XbdMerge/proguard/0757626b0.txt -include obj/Release/XbdMerge/proguard/1db418320.txt -include obj/Release/XbdMerge/proguard/1f4fd9cc0.txt -include obj/Release/XbdMerge/proguard/211c61910.txt -include obj/Release/XbdMerge/proguard/2f4d086a0.txt -include obj/Release/XbdMerge/proguard/581878c90.txt -include obj/Release/XbdMerge/proguard/67b1d0a90.txt -include obj/Release/XbdMerge/proguard/8f1de9cb0.txt -include obj/Release/XbdMerge/proguard/a35ed7280.txt -include obj/Release/XbdMerge/proguard/acdd43380.txt -include obj/Release/XbdMerge/proguard/b76e0d310.txt -include obj/Release/XbdMerge/proguard/c756521f0.txt -include obj/Release/XbdMerge/proguard/d87effcf0.txt -include obj/Release/XbdMerge/proguard/d99a9fda0.txt -include obj/Release/XbdMerge/proguard/d9f2c52f0.txt -include obj/Release/XbdMerge/proguard/dc663e480.txt -include obj/Release/XbdMerge/proguard/e5bf18810.txt -include obj/Release/XbdMerge/proguard/e843ef2a0.txt -include obj/Release/XbdMerge/proguard/fb4df8d50.txt "-injars 'obj/Release/proguard/__proguard_input__.jar':'/Library/Frameworks/Mono.framework/External/xbuild-frameworks/MonoAndroid/v7.1/mono.android.jar':'/Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/mandroid/android-support-multidex.jar':'obj/Release/__library_projects__/Bolts.AppLinks/library_project_imports/bin/classes.jar':'obj/Release/__library_projects__/Bolts.Tasks/library_project_imports/bolts-tasks.jar':'obj/Release/__library_projects__/EasySplashScreen/library_project_imports/bin/classes.jar':'obj/Release/__library_projects__/ExoPlayer/library_project_imports/bin/classes.jar':'obj/Release/__library_projects__/FormsViewGroup/library_project_imports/formsviewgroup.jar':'obj/Release/__library_projects__/Glide/library_project_imports/glide-3.8.0.jar':'obj/Release/__library_projects__/Refractored.Controls.CircleImageView/library_project_imports/bin/classes.jar':'obj/Release/__library_projects__/Square.OkHttp/library_project_imports/okhttp.jar':'obj/Release/__library_projects__/Square.OkIO/library_project_imports/okio.jar':'obj/Release/__library_projects__/Square.Picasso/library_project_imports/picasso-2.5.2.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Animated.Vector.Drawable/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Compat/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Core.UI/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Core.Utils/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.CustomTabs/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Design/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Fragment/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Media.Compat/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Transition/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.Vector.Drawable/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.v4/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.v7.AppCompat/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.v7.CardView/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.v7.MediaRouter/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.v7.Palette/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Android.Support.v7.RecyclerView/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Facebook/library_project_imports/bin/classes.jar':'obj/Release/__library_projects__/Xamarin.Facebook.AudienceNetwork/library_project_imports/bin/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Analytics/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Analytics.Impl/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Auth/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Common/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Database/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Database.Connection/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Iid/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Storage/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.Firebase.Storage.Common/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Ads/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Ads.Lite/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Base/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Basement/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Clearcut/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Gass/library_project_imports/classes.jar':'obj/Release/__library_projects__/Xamarin.GooglePlayServices.Tasks/library_project_imports/classes.jar'" "-libraryjars '/Users/emmnock/AndroidStudioProjects/android-sdk-macosx/platforms/android-25/android.jar'" -outjars "obj/Release/proguard/__proguard_output__.jar" -optimizations !code/allocation/variable proguard.ParseException: Unknown option '' in line 1 of file 'proguard.cfg', included from argument number 10 at proguard.ConfigurationParser.parse(Unknown Source) at proguard.ProGuard.main(Unknown Source) /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets(1922,3): error MSB6006: "java" exited with code 1. Done executing task "Proguard" -- FAILED. Done building target "_CompileToDalvikWithDx" in project "FindMeApp.Droid.csproj" -- FAILED. Done building project "FindMeApp.Droid.csproj" -- FAILED. 

Hablemos de esto. Hay algunas cosas que terminan haciendo su aplicación muy grande.

1. Enrutador Mono

Dependiendo de su Conjunto de Comportamiento de Enlace, puede estar arriesgando un poco de espacio al no emplear un comportamiento de vinculación más agresivo. Es decir, si establece su comportamiento de vinculador en None , está diciendo "Incluya todo dentro de mi aplicación aunque no se use". Esto puede agregar bastante un exceso de clases / constructores / métodos / etc que pueden hinchar un archivo de ensamblaje. Se trata de un enlazador gestionado que significa que sólo enlazará su código administrado (C #)

Vea mi blog sobre esto:

http://www.jon-douglas.com/2017/04/13/linker-bitdiffer/

2. Arquitecturas de CPU

Es posible que incluya demasiadas arquitecturas en su APK de lo que realmente necesita. Con cada ABI adicional, está agregando un poco de hinchazón a su aplicación.

https://developer.xamarin.com/guides/android/application_fundamentals/cpu_architectures/#How_to_Specify_Supported_Architectures

También vea mi respuesta sobre esto aquí: ¿Qué ABI de Xamarin debemos apoyar

3. Recursos / Archivos crudos

Grandes recursos y archivos sin procesar incluidos en su aplicación. Lo más probable es que cuando desarrolles tu aplicación, puedas aportar algunos recursos. Sin embargo, es posible que en realidad no estar prestando atención a lo grande que algunos de esos recursos son. Un truco para averiguar la causa principal de la hinchazón en un APK es usar una herramienta como WinDirStat ( https://windirstat.info/ ) o Disk Inventory X ( http://www.derlien.com/ ) para investigar por qué su .apk es tan grande.

4. Proguard

Por último Proguard se puede utilizar como un medio para reducir su APK mediante la eliminación de las clases, campos, métodos y atributos no utilizados. Piense en Proguard como un vinculador nativo que optimizará su bytecode y quitará las instrucciones de código no utilizadas.

Vea la documentación que escribí para esto aquí:

http://www.jon-douglas.com/2016/11/22/xamarin-android-proguard/

y

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/proguard/#Overview

RE: ¿Por qué Proguard está fallando?

Puedes ver mi post sobre esto aquí:

Xamarin proguard.ParseException: Opción desconocida '' en la línea 1 del archivo 'Properties / proguard.cfg'

Bueno … eso es lo malo de usar Xamarin. Incluye mono runtime y otras cosas intro tu .apk.

Pero usted tiene algunas opciones:

1) Arreglar su vinculación. Sí, eso lleva tiempo y agrega complejidad no deseada. Pero es lo que es, no se puede volver a escribir todo el código de vuelta a nativo.

2) Hay una opción – "conjuntos de paquete en código nativo", de mi práctica que permite reducir el tamaño de .apk por la mitad. Pero requiere licencia de empresa.

3) Construir la aplicación sólo para un conjunto de instrucciones, puede hacerlo en la pestaña "Android Build -> Avanzado". Si quieres que tu aplicación pueda ejecutarse en todos los dispositivos, deja armeabi . Desde mi experiencia, usted puede elegir armeabi-v7a , que da un rendimiento mucho mejor, y casi todos los dispositivos hoy en día apoya. Introduzca aquí la descripción de la imagen Además, asegúrese de quitar la garrapata de

Introduzca aquí la descripción de la imagen

Incluso si eso no da ningún resultado, mientras que la aplicación es menos de 100 MB, puede publicarlo como está.

  • Llamada del widget de búsqueda OnNewIntent dos veces
  • Creación de aplicaciones de mapas de muestras monodroide
  • Añadir Google Maps API v2 en Mono para Android
  • Mono para Android - ¿Cómo funciona?
  • Xamarin Android ProGuard Habilitar
  • ¿Por qué Xamarin.Android reconstruye toda la solución al ejecutarlo?
  • Utilizar un ValueAnimator para hacer que un TextView parpadee diferentes colores
  • Xamarin Forms - Media Plugin - Vaciar las miniaturas en el teléfono
  • Android EditText La vinculación se rompe después de la actualización de MvvmCross de 4.2.3 a 4.4.0 con Linker activado
  • Diseño personalizado para DialogFragment OnCreateView vs. OnCreateDialog
  • Puedo usar adb shell para enviar comandos a mi aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.