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.
- Registro Xamarin no manejado (Android sin capturar) excepciones
- AndroidGameWindow.SetDisplayOrientation NullReferenceException
- Asegurar cadena en APK
- ¿Cuál es la forma correcta de implementar Fragments en MvvmCross 3.5.1
- Cómo reducir el tamaño del paquete
¿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.
- ¿Cómo poner diferentes elementos infantiles personalizados en elementos de lista ampliable?
- Xamarin no muestra la imagen de formularios: Android
- ¿Puedes ejecutar juegos XNA en Android?
- Bluetooth Android / Xamarin transmisión de dispositivo en serie con outputtream vacío
- ¿Qué podría estar causando el error "OutputPath propiedad no está establecida para proyecto ProjectName.csproj" en mi proyecto MonoDevelop
- Xamarin: Android: System.UnauthorizedAccessException: se deniega el acceso a la ruta
- ¿Cómo popule ListView con elementos de la base de datos en Xamarin?
- Mostrar la imagen de la pantalla de bienvenida con ajuste automático
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.
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. Además, asegúrese de quitar la garrapata de
Incluso si eso no da ningún resultado, mientras que la aplicación es menos de 100 MB, puede publicarlo como está.