2016-05-19 5 views
4

先日私は開発しているアプリから「App Info」を調べていましたが、驚いたことに、膨大な量のMbが「キャッシュ」として使用されていたことがわかりました(アプリはまだコンテンツをダウンロードしていない、それはちょうどモックアップだった)。最初は私が追加した重い図書館(フレスコ..)になると思ったので、何が問題なのかを調べるために空白のプロジェクトを作成することにしました。gradle v1.xとv2.xの巨大なApkの違い

私は2つのシナリオを試しました:プレロリポップとロリポップ。これで私は彼らが "データ"を扱う方法といくつかの違いがあることを知ったが、全体的なAPKのサイズは同じだった。ここでは、前のロリポップ(4.4.4)には、ロリポップの "キャッシュ"(最初の画像)はほとんどありませんでした...よく8MBの "キャッシュ"。

lollipop vs pre-lollipop - gradle 2.1

このすべては、私はロリポップで開発され、上記の方法より少ない「キャッシュ」を持っていたのだ他のアプリので、十分ではありませんでした。私は何が違いになるかもしれないと考え始めた、そして、ついに私は何かを見つけたと思う、gradle版!

lollipop vs pre-lollipop - gradle 1.5

プロジェクトは、Gradleの1.5でビルド小さいAPKサイズとほとんどない「キャッシュ」(ロリポップとプリロリポップ両方)
は、私が欠けているものがある持っていますか?なぜ「キャッシュ」サイズが急増したのですか?
最新のgradleバージョンを使用している間にこれを避ける方法はありますか?

+1

Androidスタジオを使用していますか?その場合、2つのシナリオを比較するために、Android Plugin for Gradle 2.xとInstant Runの両方を有効または無効にして、テストを再度実行してみてください。私の推測では、あなたが見ているものはインスタント実行の影響であり、それはあなたの実際のプロダクションアプリの動作を反映していないことです。 – CommonsWare

+0

**あなたは絶対に正しい!!! **これは問題だと思ったが、チェックしなかった:P。 **ありがとうございます** – iroyo

答えて

1

Instant Runは、コードの変更を反映して、アプリケーションのインクリメンタルチャンクを表示します。そのようなものはまだあなたのアプリケーションによって読み込み可能である必要があるので、彼らは明らかにその情報を「キャッシュ」(getCacheDir()?)と数えられるいくつかの場所に置いています。

同様に、これらの動的に変化するビットを読み込む方法を知っているコードの塊が含まれている必要があるため、アプリのメインAPK自体が少し大きくなります。

これらの値を測定する必要がある場合は、インスタント実行を無効にするか、リリースビルド(自動的に非インスタント実行)を実行します。

関連する問題