不,这并不正常-早期版本的
GPSTest app包含Google Play Services地图后使用Proguard混淆后仅为808KB-当前版本(添加另一个库后)混淆后约为1,497KB。我建议按照以下步骤通过命令行导出APK以避免在Android Studio中出现潜在问题:
- 进入命令行中的项目根目录
- 运行
gradlew assembleRelease
- 在
/app/build/apk
文件夹中找到签名和混淆的APK
如果您通过Android Studio导出APK,请注意存在
已知问题,即Android Studio默认使用
assembleDebug
任务而不是
assembleRelease
任务进行导出。因此,特定于发布buildType的
build.gradle
文件中的任何Proguard运行配置都将不会执行。
作为通过Android Studio导出的解决方法,您可以通过以下步骤更改默认的Build Variant:
1. 在Android Studio中,打开“View->Tool Windows->Build Variants”
2. 在打开的窗口中,将“Build Variant”从“debug”更改为“release”。
现在,当您执行“Build->Generate Signed APK…”时,Android Studio应该运行发布Build Variant,如果您在build.gradle中正确配置了Proguard,则应该运行Proguard。您可以在正常情况下调试应用程序时切换回“debug”变量。
如果您想复制GPSTest中的设置,这是proguard.cfg:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field
...和build.gradle
:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
}
if (project.hasProperty("secure.properties")
&& new File(project.property("secure.properties")).exists()) {
Properties props = new Properties()
props.load(new FileInputStream(file(project.property("secure.properties"))))
signingConfigs {
debug {
storeFile file("gpstest.debug.keystore")
}
release {
storeFile file(props['key.store'])
keyAlias props['key.alias']
storePassword "askmelater"
keyPassword "askmelater"
}
}
} else {
signingConfigs {
debug {
storeFile file("gpstest.debug.keystore")
}
release {
}
}
}
buildTypes {
release {
runProguard true
proguardFile 'proguard.cfg'
signingConfig signingConfigs.release
}
}
}
task askForPasswords << {
def storePw = new String(System.console().readPassword("\nKeystore password: "))
def keyPw = new String(System.console().readPassword("Key password: "))
android.signingConfigs.release.storePassword = storePw
android.signingConfigs.release.keyPassword = keyPw
}
tasks.whenTaskAdded { theTask ->
if (theTask.name.equals("packageRelease")) {
theTask.dependsOn "askForPasswords"
}
}
dependencies {
compile project(':ShowcaseViewLibrary')
compile 'com.google.android.gms:play-services:3.2.65'
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'org.jraf:android-switch-backport:1.2'
compile 'com.google.maps.android:android-maps-utils:0.2.1'
}
如果您想将GPSTest源代码用作示例,可以在Github上获取整个源代码。
编辑
当您使用Google Play服务v6.5或更高版本的功能时,帮助缩小APK的另一种方法是仅包含您实际使用的Google Play服务中的库。
例如,如果您只使用Maps API v2,则可以在build.gradle
中仅包含Maps API v2的库,而不是整个Google Play服务库:
compile 'com.google.android.gms:play-services:7.8.0'
...你只需要包含Maps API v2部分:
compile 'com.google.android.gms:play-services-maps:7.8.0'
请参阅
Google Play服务 - "选择性地将API编译到可执行文件中"部分,了解可以拆分的API的详细信息。以下是截至2015年9月的列表:
Google+
com.google.android.gms:play-services-plus:7.8.0
Google Account Login
com.google.android.gms:play-services-identity:7.8.0
Google Actions, Base Client Library
com.google.android.gms:play-services-base:7.8.0
Google App Indexing
com.google.android.gms:play-services-appindexing:7.8.0
Google App Invites
com.google.android.gms:play-services-appinvite:7.8.0
Google Analytics
com.google.android.gms:play-services-analytics:7.8.0
Google Cast
com.google.android.gms:play-services-cast:7.8.0
Google Cloud Messaging
com.google.android.gms:play-services-gcm:7.8.0
Google Drive
com.google.android.gms:play-services-drive:7.8.0
Google Fit
com.google.android.gms:play-services-fitness:7.8.0
Google Location, Activity Recognition, and Places
com.google.android.gms:playservices-location:7.8.0
Google Maps
com.google.android.gms:play-services-maps:7.8.0
Google Mobile Ads
com.google.android.gms:play-services-ads:7.8.0
Mobile Vision
com.google.android.gms:play-services-vision:7.8.0
Google Nearby
com.google.android.gms:play-services-nearby:7.8.0
Google Panorama Viewer
com.google.android.gms:play-services-panorama:7.8.0
Google Play Game services
com.google.android.gms:play-services-games:7.8.0
SafetyNet
com.google.android.gms:play-services-safetynet:7.8.0
Google Wallet
com.google.android.gms:play-services-wallet:7.8.0
Android Wear
com.google.android.gms:play-services-wearable:7.8.0
runProguard
设置为true
会发生什么? - Daenyth