我正在开发包含以下依赖项的应用程序
模块级别
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.google.android.gms:play-services:9.0.0' **// for GCM**
compile 'com.android.support:cardview-v7:23.3.0'
compile 'com.squareup.picasso:picasso:2.5.2' **//Rounding and displaying image from URL**
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.github.lecho:hellocharts-library:1.5.8@aar' **// For bar graph**
compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
transitive = true;
}
compile 'com.google.firebase:firebase-core:9.0.0' **// Analytics**
}
项目级别
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.google.gms:google-services:3.0.0'
classpath 'io.realm:realm-gradle-plugin:1.0.1' // Database
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
我的
/ Assets / 150kb使用字体aweasome文件。
/ java - 644 KB
/ res - 740 KB(使用高分辨率图像1920 * 1280尺寸220kb压缩与tinypng)
已经应用了ProGuard。 删除未使用的文件和代码。
问题
我的应用程序大小仍为7.03MB
如何减少应用尺寸?我不知道为什么这是7.03MB
是否有任何计算给出了依赖在apk中使用的大小?
喜欢谷歌播放服务在apk中占据200kb左右。
答案 0 :(得分:2)
您可以只调用编译所需的软件包,而不是编译完整的Google服务包。下面有一个链接,请检查相同 https://developers.google.com/android/guides/setup
在使用GCM之前,我建议您使用Firebase云消息传递,因为谷歌正在将其基数从gcm转移到firebase。
Firebase Cloud消息的链接: -
https://firebase.google.com/docs/cloud-messaging/android/client
可以帮助您的要点: -
您可以在设计中使用FontAwesome图标而不是图像,这对应用程序大小有很大影响。为每个resoultion提供dimen.xml中每个布局的特定大小。
如果您使用的是图像,则必须确保没有为不同的屏幕插入相同的图像。尝试尽可能使用android的内置图标
答案 1 :(得分:1)
在6.5之前的Google Play服务版本中,您必须进行编译 整个API包进入您的应用程序。在某些情况下,这样做了 保持应用程序中的方法数量更加困难(包括 65,536下的框架API,库方法和您自己的代码 限制。
从版本6.5开始,您可以选择性地编译Google Play 将API服务到您的应用中。例如,仅包含Google Fit和Android Wear API,替换您的以下行 build.gradle文件:
替换
compile 'com.google.android.gms:play-services:9.6.1' //or the version you are using
您需要特定的api:
com.google.android.gms:play-services-gcm:9.6.1
// and other if you need
可以找到特定GMS apis的依赖关系列表here。
答案 2 :(得分:0)
您可能缺少两种有用的技术
优化Dex和资源以及proguard
这导致代码更小,因此只应在发布版本中使用。否则在调试过程中会造成困难。它可以实现如下:
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
您还需要专注于从依赖SDK中删除未使用的字符串。
许多图书馆(如支持/ Google Play服务)都附带了太多语言的字符串资源。您可能不打算支持所有这些。使用以下方法,您可以控制大小:
android {
defaultConfig {
...
resConfigs "en"
}
}
这将删除所有不适合英语的资源。