这是一个使用 gradle 的 Android 应用程序。点击运行后,找到APP_V1.3.4_2016-02-22_
11:30:29
_google_play.apk
在 outputs/apk
中,但事件日志显示:
11:30:31 EmptyThrowable: The APK file /.../WorkSpace/Android/.../app/build/outputs/apk/APP_V1.3.4_2016-02-22_11:30:14_google_play.apk does not exist on disk.
11:30:32 Session 'app': Error Installing APK
这是我的 build.gradle
文件:
apply plugin: 'com.android.application'
def releaseTime() {
return new Date().format("yyyy-MM-dd_HH:mm:ss",
TimeZone.getTimeZone("GMT+08:00"))
}
android {
compileSdkVersion 'Google Inc.:Google APIs:23'
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example"
minSdkVersion 14
targetSdkVersion 23
versionCode 29
versionName "1.3.4"
manifestPlaceholders = [SOME_CHANNEL_VALUE: "some_channel"]
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
debug {}
release {
// ...
}
}
buildTypes {
debug {
zipAlignEnabled true
minifyEnabled false
shrinkResources true
}
release {
zipAlignEnabled true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
signingConfig signingConfigs.release
applicationVariants.all { variant ->
def time = releaseTime()
variant.outputs.each { output ->
def apk = output.outputFile
def endFileName = "${time}_${variant.productFlavors[0].name}.apk"
if (apk != null &&
apk.name.endsWith('.apk') &&
!apk.name.endsWith('${endFileName}')) {
def fileName = "APP_V${defaultConfig.versionName}_${endFileName}"
output.outputFile = new File(apk.parentFile, fileName)
}
}
}
}
}
productFlavors {
google_play {
manifestPlaceholders = [SOME_CHANNEL_VALUE: "google_play"]
}
}
}
dependencies {
// ...
}
那么releaseTime()
有什么问题吗?
在我的例子中,问题是要安装的 apk 的名称被缓存了,所以每次我尝试运行该应用程序时,都会生成一个带有今天日期的 apk,但是在安装时,Android Studio 会寻找一个带有旧日期的 apk 文件姓名。解决方案是单击Sync Gradle,然后单击Build> Rebuild Project。您可能还想删除之前的文件夹 app/apks 和 app//build/outputs/apk。
我是一名优秀的程序员,十分优秀!