Android 可绘制对象在 Debug 中工作但在 Release 中变成黑色方块
Android drawables work in Debug but become black squares in Release
我正在开发一个 Android 应用程序(用 Flutter 编写,但我认为这不重要),它使用名为 quick_plus.png
的可绘制对象,如下所示:
它在调试模式下工作得很好。
但不是在发布模式下,quick_plus.png
可绘制对象变成了黑色方块。解压缩我的 APK 后,我确认这也是它们包含的内容,只是一个黑色方块:
不知道这是否相关,但我按照 bundletool docs:
生成了这些 APK
bundletool build-apks \
--bundle=build/app/outputs/bundle/release/app-release.aab \
--output=build/app/outputs/bundle/release/app-release.apks \
--ks=... \
--ks-pass=... \
--ks-key-alias=... \
--key-pass=...
bundletool install-apks --apks=build/app/outputs/bundle/release/app-release.apks
这是我的 build.gradle
发布配置:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
和 proguard-rules.pro
:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class com.dexterous.** { *; }
有人以前看过这个吗?
找到问题了!
这是由于 Android shrinking and obfuscating 我的代码。我所要做的就是添加一个名为 android/app/src/main/res/raw/keep.xml
的文件:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/quick_plus" />
我正在开发一个 Android 应用程序(用 Flutter 编写,但我认为这不重要),它使用名为 quick_plus.png
的可绘制对象,如下所示:
它在调试模式下工作得很好。
但不是在发布模式下,quick_plus.png
可绘制对象变成了黑色方块。解压缩我的 APK 后,我确认这也是它们包含的内容,只是一个黑色方块:
不知道这是否相关,但我按照 bundletool docs:
生成了这些 APKbundletool build-apks \
--bundle=build/app/outputs/bundle/release/app-release.aab \
--output=build/app/outputs/bundle/release/app-release.apks \
--ks=... \
--ks-pass=... \
--ks-key-alias=... \
--key-pass=...
bundletool install-apks --apks=build/app/outputs/bundle/release/app-release.apks
这是我的 build.gradle
发布配置:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
和 proguard-rules.pro
:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class com.dexterous.** { *; }
有人以前看过这个吗?
找到问题了!
这是由于 Android shrinking and obfuscating 我的代码。我所要做的就是添加一个名为 android/app/src/main/res/raw/keep.xml
的文件:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/quick_plus" />