これで、最初のアプリをGoogle Playストアで公開することになります。アプリで使用されている画像は既に圧縮されています。そして、アプリのサイズに関していくつか質問があります。
アプリのサイズが2 MB未満の場合、ユーザーがアプリをアンインストールする可能性は低くなります。
ただし、Windowsでapkファイルを表示すると3.10 MBが表示されますが、アプリ情報から表示されるようにデバイスにインストールされると表示されます:
Total............................8.68 MB
App..............................7.02 MB
USB storage app..................0.00 B
Data.............................1.66 MB (perhaps it is the size of sqlite db + ttf's)
SD card..........................0.00B
だから、なぜアプリのサイズがそんなに大きくなるのか、最小化できますか?
そして、私のプロジェクトでは、Android Private Libraries
にある4つのライブラリー(jar)を使用していますが、これらのライブラリーのコピーもこのフォルダーの外にあります。
それらを削除する方が安全ですか?それらを削除するとapkサイズを小さくするのに役立ちますか?
また、Proguard
の機能を説明する多くのWebページを訪問しました。Proguardがapkのサイズを削減し、未使用のコードを削除し、クラス、フィールド、メソッドの名前をセマンティックに変更することでコードを縮小、最適化、難読化する方法を本当に理解していますあいまいな名前。その結果、リバースエンジニアリングがより困難な、サイズの小さい.apkファイルが作成されます。しかし、私はproguard-project.txt
がどのように見えるはずなのかわかりません。
アプリで4つのライブラリ、つまりeasyfacebookandroidsdk_2.3.jar
、Android-support-v7-appcompat.jar
、google-play-services.jar
&Android-support-v4.jar
を使用しています。
現在、私のproguard-properties.txt
はこのように見えますが、WebViewも使用していません
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-Android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.Android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-keep class com.facebook.** { *; }
-keepattributes Signature
だから、apkサイズを減らすために、未使用の参照、クラスなどを削除できるように、proguard-properties.txt
にどの行を追加する必要がありますか?
https://code.google.com/p/Android-unused-resources/ にあるAndroidUnusedResources.jarを使用すると、Androidプロジェクトで未使用のリソースが見つかります。
これはプロガードがすでにやったことと同じだと思いますか?または、プロガードを有効にした後にも使用する必要がありますか?
また、共有する必要があると思われる欠落しているものを回答に記載することもできます。
前もって感謝します...
アプリのサイズを小さくする方法は次のとおりです。詳細は、次のリンクで説明されています。
https://medium.com/@fahimsakri/put-your-apks-on-diet-cc3f40843c84#.m860q8s1
だから、なぜアプリのサイズがそれほど大きくなるのか、最小化できますか?
.apkファイル
.apkファイルはまったく魔法ではありません。これはAndroidアプリケーションのコンテンツを表すファイルのバンドルです。アーカイブツール(7Zipなど)で開くと、ブラウザでコンテンツを抽出できます。
このapkファイルはインストール中に抽出されるため、アプリのサイズが増加します。
コンパイルに関する詳細
。Javaファイルはどうなりますか?
まあ、最初にインストールされたJDK実装によって通常コンパイルされます。 (.class-filesに)コンパイルされた後、Android SDKからのdx-toolは、これらの「通常の」JavaクラスをDalvik-Bytecodeにクロスコンパイルします。
この「特別な」Javaコードは、オープンソースのJRE実装Apache Harmonyに基づくDVM(Dalvik Virtual Machine)によって解釈されます。
/ asset-directoryに入れたリソースはどうなりますか?
Androidは、バイナリRAWファイル(SQLiteデータベースなど)を追加するための/ assets-directoryを提供しています。このディレクトリに配置されるファイルはコンパイルも最適化もされません。
このディレクトリにファイルを配置すると、これはAndroidに期待される種類の動作です。
/ res/raw-directoryに入れたリソースはどうなりますか?
/ assets-directoryと同様に、ここにバイナリ(または他の)生ファイル(たとえば、ヘルプページのHTMLファイル)を配置することもできます。これらのファイルはコンパイル/最適化されます(可能な場合)。
マニフェストと他のXMLファイルはどうなりますか?
Android-Manifestおよびその他のXMLファイル(レイアウト、文字列など)は保存され、バイナリXML形式に「コンパイル」されます。これは速度の最適化です。
インストール後にアプリのサイズが大きくなる理由がわかりました。
今それらを削除する方が安全ですか(Androidライブラリ)、それらを削除するとapkサイズを小さくするのに役立ちますか?
_google-play-services.jar
_は、開発環境でのみ必要であるため、ランタイム環境では必要ないため、削除できます。PlayStoreからインストールするようユーザーに促します。
Proguardへのアクセス::未使用のJavaクラスを削除し、コードの難読化を行います。レイアウトxmlなどの未使用のリソースは削除しません。したがって、私の意見では、ツールを実行して未使用のリソースを削除することです。
サイズを小さくするためのヒントを以下に示します。
_You can remove drawable-ldpi folder if you are using it.Since there are no more devices with ldpi screen resolution.
_
Reduce the use of image drawables(i.e .png or jpg files).Use xml drawables and 9-patch drawables.
_Remove any debug info related code.
_
_Avoid code duplication.Follow the principal of Don't Repeat yourself.
_
これでアプリのサイズを小さくするのに十分だと思います。
はるかに小規模なプロジェクトを行っている場合は、アプリ互換ライブラリをすべて削除することを検討してください。 APIの特定のバージョン用にアプリの複数のバージョンを作成した方がよい場合があります。互換性ライブラリを追加するだけで、47Kバイトのアプリバルーンが3Mバイトになるのを見ました。
概要:スペースを節約するために、不要なライブラリを回避します。Googleが提供するライブラリも含めます(ほとんどのテンプレートに含まれています!)。
http://developer.Android.com/tools/help/proguard.html を有効にしてみてください。難読化されていなくても。依存関係から未使用のJavaコードを削除します。不要な依存関係があるかどうかを確認します-追加したが使用していないJAR。大きな画像やその他のファイルのリソースを確認します。形式や解像度を変更したり、使用していない場合は削除したりします。
通常、ProGuardでは、次を使用してAPKを縮小できます(これはモジュールのbuild.gradle
ファイル):
...
Android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
...
}
...
具体的には、minifyEnabled true
およびshrinkResources true
:
minifyEnabled
は、コードファイル(Javaなど)を難読化および圧縮します。これはProGuardの主要な機能であり、APKを縮小するだけでなく、リバースエンジニアリングを困難にします。
shrinkResources
は、未使用のリソースファイル(画像やその他のアセットなど)を削除するために使用されます。たとえば、Androidライブラリでコンパイルしているが、そのAndroidライブラリで一部の画像を使用していない場合、それらは最終版に含まれませんbuild。Android開発者向けのビデオがあります here 。
https://tinypng.com/ にアクセスできるように、すべてのPNGを圧縮するオプションの1つです。
その後、たとえば不要なライブラリのインポートを削除します。appcompatのv7を既にインポートしている場合、サポートライブラリv4をインポートする必要はありません。
最後に、apkの署名手順の完了後、詳細についてはAndroid-sdkに同梱されているzipalignツールを使用してください http://developer.Android.com/tools/help/zipalign.html を参照してください。
私が知っているのはそれで全てです。
ほとんどの場合、アプリのサイズは、アプリケーションの作成に使用するリソースファイル(画像など)に比例します。常に以下を考慮してください。
ライブラリのインポート
また、アプリでベクタードロウアブルを使用して、さまざまな画面サイズの複数のドロウアブルを削除し、APKサイズを小さくすることもできます。参照: https://stackoverflow.com/a/33984100/5305331
別の答えを試すこともできますが、それらは非常に優れていますが、apkサイズの量を減らすための小さなトリックがあります。
プロジェクトでは多くのライブラリを使用しています。それらの一部はネイティブ言語(c)で開発され、一部はアーキテクチャの特定のバージョン用に開発されました。
いくつかのアーキテクチャがあります:
Uncommon
Common
Common
Rare
Rare
Common
Uncommon
ターゲットアーキテクチャをフィルタリングし、不要なオプションを削除できます。例えば :
buildTypes {
debug {
...
}
release {
...
ndk {
abiFilters "arm64-v8a", "armeabi-v7a", "x86"
}
}
}
APK/Zipを高く再圧縮すると、Android SDK、通常のapkビルドよりも30%節約されます。大量のテキストファイルではなく、大量の画像の場合に便利です。
ファイルサイズが増加するのは、APKが圧縮ファイルであるためです。 Proguardの使用が役立ちます-ここに良いリソースがあります:
http://developer.sonymobile.com/2012/01/31/tips-for-reducing-apk-file-size/
ただし、ファイルサイズを気にすることなく何百万ものダウンロードを取得できることを保証できます。私の個人的な経験からだけでなく、Google Playからも見ています。ファイルサイズが2 MBを大きく超えるダウンロードが数千あるアプリが何千もあります。実際、20MB程度の多くのものがあります。つまり、サイズを小さくするためにできることを行いますが、使用やダウンロードに影響することを心配しないでください。
まず、ドローアブルに目を向けます。
ブログを確認してください apkサイズを削減するさまざまな方法
主なポイントは次のとおりです。
注:有効にしてください! (*すべてが後で機能するかどうかをダブルおよびトリプルチェックするだけです)
ProGuardはデフォルトで縮小、最適化、難読化を適用します。これが主な目的です。 Androidビルド、project.properties
の文書化されたProGuard行を編集することにより、有効にする必要があります。AntおよびEclipseを使用したリリースビルドのProGuard 。Antを使用すると、ビルドログにProGuardの出力が表示されます。
Android documentation> Tools> ProGuard を参照してください。
その後、処理済みのアプリケーションを確認する必要があります。追加の-keepオプションが必要になる場合があります。おそらくGoogle Play Services用。保持できる量が少ないほど、アプリケーションは小さくなります。
経験から指摘できることが2つあります。
Eclipseを使用してapkファイルを作成すると、リソースが複製されます(少なくとも私の場合は発生しました)。antとbuild.xmlを使用してapkを作成し、サイズを比較できます。リソースのエイリアシングも調べてください。