使用 Android Studio 签署 APK 时出现 Proguard 错误
Posted
技术标签:
【中文标题】使用 Android Studio 签署 APK 时出现 Proguard 错误【英文标题】:Proguard error while signing APK with Android Studio 【发布时间】:2019-02-14 09:12:32 【问题描述】:我正在尝试使用 Proguard 调试我的错误。我的项目在调试时运行良好,但在 Proguard 上运行良好。任何帮助将不胜感激。
-
我已经尝试在 Proguard 中使用
ignore warning
。但是,应用程序在生成 APK 时会崩溃。
当前的 Proguard 设置不起作用。我已上传到Gist 的消息控制台
Build.gradle 如下所示
Prodguard-project.txt 在gist
buildscript
repositories
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:2.2.3'
build.gradle
apply plugin: 'com.android.application'
apply from: rootProject.file('gradle/codequality.gradle')
android
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig
versionCode 49
versionName "1.8.8"
minSdkVersion 14
targetSdkVersion 22
buildConfigField 'String', 'BUILD_TAG', '"' + getBuildTag() + '"'
buildConfigField 'String', 'OWM_API_KEY', '"' + getOpenWeatherMapApiKey() + '"'
buildConfigField 'boolean', 'ENABLE_WEATHER', 'true'
def buildSuffix = getBuildSuffix(versionName, versionCode)
applicationVariants.all variant ->
def file = variant.outputs[0].outputFile
variant.outputs[0].outputFile = new File(file.parent, file.name.replace(".apk", "-" + buildSuffix + ".apk"))
if (project.hasProperty('signingKeyStoreFile'))
signingConfigs
release
storeFile file(signingKeyStoreFile)
storePassword signingKeyStorePassword
keyAlias signingKeyAlias
keyPassword signingKeyPassword
buildTypes
release
minifyEnabled true
proguardFile 'proguard-project.txt'
if (project.hasProperty('signingKeyStoreFile'))
signingConfig signingConfigs.release
lintOptions
abortOnError false
checkReleaseBuilds false
disable 'MissingTranslation'
compileOptions
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
def getBuildSuffix(versionName, versionCode)
def suffix = versionName + '-' + versionCode
if (System.getenv()['BUILD_NUMBER'] != null)
suffix += '-b' + System.getenv()['BUILD_NUMBER']
return suffix
def getBuildTag()
def tag = ''
if (System.getenv()['BUILD_NUMBER'] != null)
tag += 'b' + System.getenv()['BUILD_NUMBER']
else
tag += 'l'
tag += '@' + new Date().format('yyyyMMdd')
return tag
def getOpenWeatherMapApiKey()
if (project.hasProperty('owmApiKey'))
return owmApiKey
else
def apiKeyFile = file('default_owm_api_key');
if (apiKeyFile.isFile())
return apiKeyFile.text.trim()
return 'NOKEY'
///////////////////////////////////////////////////
// Dependencies
repositories
mavenCentral()
dependencies
//compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
//compile 'com.android.support:support-v4:19.1.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'net.danlew:android.joda:2.9.4.1'
compile 'com.google.android.gms:play-services-ads:9.8.0'
compile 'com.android.support:appcompat-v7:22.1.1'
compile 'com.google.android.gms:play-services-appindexing:9.8.0'
configurations
all*.exclude group: 'com.google.firebase', module: 'firebase-core'
all*.exclude group: 'com.google.firebase', module: 'firebase-iid'
///////////////////////////////////////////////////
// Checkstyle
task checkstyleDebug(type: Checkstyle, dependsOn: 'compileDebugSources')
source = fileTree('src/main/java/')
classpath = files('build/intermediates/classes/debug')
check.dependsOn checkstyleDebug
///////////////////////////////////////////////////
// Findbugs
task findbugsDebug(type: FindBugs, dependsOn: 'compileDebugSources')
source = fileTree('src/main/java/')
classes = fileTree('build/intermediates/classes/debug')
classpath = files() // empty classpath!
effort = 'max'
excludeFilter = rootProject.file('config/findbugs/androidExcludeFilter.xml')
check.dependsOn findbugsDebug
///////////////////////////////////////////////////
// PMD
task pmd(type: Pmd)
source = fileTree('src/main/java/')
ruleSets = ['java-basic', 'java-braces', 'java-android']
check.dependsOn 'pmd'
【问题讨论】:
【参考方案1】:尝试将getDefaultProguardFile('proguard-android.txt')
添加到proguardFile 'proguard-project.txt'
,以获得下一行:
proguardFile getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
或者开始从您的 proguard-project.txt 中搜索问题,例如:
添加规则-keepattributes SourceFile,LineNumberTable,InnerClasses,Signature,Exceptions
添加规则-dontwarn com.google.**
依此类推,由你的 proguard 失败日志
【讨论】:
如果我采用提到的第一种方法,是否需要明确添加'proguard-android.txt'文件。@LifeStyle 不,尝试不使用或尝试使用 getDefaultProguardFile(proguard-android-optimize.txt) 但使用上面提到的固定 proguard 规则 1.我是否需要明确添加 proguard-android-optimize.txt 文件,因为它目前不存在。 2. 用 getDefaultProguardFile(proguard-android-optimize.txt) 改变 proguardFile 'proguard-project.txt'。请纠正我。我必须在没有 prodguard 的情况下发布。 您可以尝试使用或不使用。 proguard-android.txt 和 proguard-android-optimize.txt 是默认的 proguard android 规则。您可以添加或不添加它们,但如果您在自己的 proguard 文件中有优化标志并添加了 proguard-android.txt,则不会执行优化。因此,使用什么以及是否使用完全由您决定。但是对于开始尝试不使用 proguardgetDefaultProguardFile(proguard-android-optimize.txt).
仅使用您的 proguard-project.txt以上是关于使用 Android Studio 签署 APK 时出现 Proguard 错误的主要内容,如果未能解决你的问题,请参考以下文章
您必须使用与您要验证的应用程序相同的签名签署一个 apk - blockchainds.com:如何通过 Android Studio 签署 apk 文件?
如何在没有 android studio 的情况下签署 android apk
最新的 Android Studio 2020.3.1 在签名 APK 时未显示签名版本选项
在 Android Studio 中签署 Android apk 文件的最简单方法是啥? [复制]
android studio更新之后打包遇到V1(Jar Signature) V2(Full APK Signature)问题