2017-07-17 15 views
2

私のアプリをアーカイブした後、私のAPKサイズは71.82MB(推定アプリケーションストアサイズ)です。私のアプリケーションにもたくさんの画像はありません。アーカイブされたAPKファイルサイズが非常に大きい - Xamarin.Android

また、リンカをに設定してください。私には唯一のオプションであるをリンクしないでください。ユーザーにとっては大きすぎます。私はリンクSDKアセンブリのみにリンクを設定し、また、すべてのアセンブリをにリンクすると、私はJavaの終了コードのエラーを取得します。

私のapkのサイズを小さくするために私が従うことができるいくつかのステップはありますか?

**どこでアプリがクラッシュ**ツールに渡さ

環境変数:

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. 
+0

共有ランタイムでコンパイルしていますか? – EJoshuaS

+0

Shared Mono Runtimeの使用(一般タブの下)はチェックされていません。私はそれを使用していません –

+0

また、 "あなたのアプリをアーカイブ"とはどういう意味ですか?クライアントに展開したり、どこかに格納する際にサイズを改善しようとしていますか? – EJoshuaS

答えて

1

これについてお話しましょう。アプリケーションを非常に大きくするいくつかのことがあります。

1.モノリンカ

あなたのリンカの動作設定に応じて、より積極的な連携動作を使用しないことにより、空間のかなりの危険を冒すことができます。つまり、リンカーの振る舞いをNoneに設定すると、「使用していない場合でもアプリケーションの中にすべてを含めてください」と言います。これは、アセンブリファイルを膨らませる可能性のあるかなり過剰なクラス/コンストラクタ/メソッド/ etcを追加することがあります。

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

2:これは、この上の私のブログを参照してください、それはだけで、あなたのマネージコード(C#の)

をリンクすることを意味管理リンカです。CPUアーキテクチャー

APKに必要以上に多くのアーキテクチャーが含まれている可能性があります。 ABIが追加されるたびに、アプリケーションにかなりの膨らみが加わります。

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

また、ここでは、この上の私の答えを参照してください。Which Xamarin ABIs should we support

3.リソース/ RAWファイル

大資源やRAWファイルは、アプリケーションに含まれています。アプリを開発しているときに、そのアプリにリソースを投入する可能性があります。しかし、実際には、それらのリソースのどれくらいの大きさに注意を払う必要はありません。 APKでの膨らみの主な原因を突き止める1つの方法は、WinDirStat(https://windirstat.info/)またはディスクインベントリX(http://www.derlien.com/)のようなツールを使用して、.apkが非常に大きい理由を調べることです。

4. ProGuardの

最後にProGuardのは、未使用のクラス、フィールド、メソッド、および属性を削除することで、あなたのAPKを縮小するための手段として使用することができます。 Proguardをネイティブリンカーと考えると、バイトコードが最適化され、使用されないコード命令が削除されます。 ProGuardのは

を失敗しているのはなぜあなたは私のポストを上見ることができます:

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

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

RE:

私はこのここのために書いたドキュメントを参照してください。ここ:

Xamarin proguard.ParseException: Unknown option '' in line 1 of file 'Properties/proguard.cfg'

0

うーん... Xamarinを使用しての欠点という。これはモノランタイムとその他のものをあなたの.apkのイントロにバンドルします。

ただし、いくつかのオプションがあります。

1)リンクを修正します。はい、時間がかかり、不必要な複雑さが増します。しかし、それは元のコードにすべてのコードを書き直すことはできません。

2)「ネイティブコードにバンドルアセンブリを組み込む」というオプションがありますが、私の練習では.apkサイズを半分に減らすことができます。しかし、企業のライセンスが必要です。

3)アプリケーションを1命令セットだけビルドします。これはAndroid Build - > Advancedタブで行うことができます。アプリをすべての端末で実行できるようにするには、armeabiとしてください。私の経験から、あなたはarmeabi-v7aを選ぶことができますが、パフォーマンスははるかに良く、ほとんどすべてのデバイスが現在サポートしています。 enter image description here また、アプリは100メガバイトの下にある間、それがあるとして、あなたはそれを公開することができ、それがどんな結果が得られない場合でも

enter image description here

からダニを削除してください。

+0

私はほぼすべてあなたのオプションを実行しているが、同じ問題に直面しているが、私のAPKはまだ大きいです(66.56MB)..私にとってはバージョン1のアプリでは大きすぎます:) – Switz

+1

@スウィッツその後、最も論理的な解決策はリンクを修正することです。結局のところ、その主な目的は、使用されていないコードをインクルードされたライブラリから取り除くことです。 Xamarinは.Netライブラリを使用しているので、削除するコードはたくさんあります:) Xamarinのリンクの詳細と、そこからライブラリを除外する方法については、https://developer.xamarin.com/guides/android/advanced_topics/を参照してください。リンクする/ – Taier

+0

しかし私のリンケージは私が質問に述べたように動作しません。おそらく、それはビルドで重要なコードを削除しています –

関連する問題