rhd*_*rhd 9 android react-native
我正在尝试将 android 目标 API 从 29 更新到 30。我已更新:
compileSdkVersion = 30
targetSdkVersion = 30
buildToolsVersion = "30.0.2"
Run Code Online (Sandbox Code Playgroud)
zipalign -p -f -v 4该应用程序在根据官方文档签名之前已与一致 。
当我尝试adb install但是.apk我得到:
失败 [-124:installPackageLI 期间解析失败:针对 R+(版本 30 及更高版本)要求已安装 APK 的 resources.arsc 未压缩存储并在 4 字节边界上对齐]
有人在这方面取得过成功吗?
小智 12
我有类似的问题。
它不应该被压缩。如果是的话,那就是问题所在。您需要以某种方式使其不被压缩。它应该看起来像
resources.arsc (OK)
Run Code Online (Sandbox Code Playgroud)
尝试一下 -
unzip -q -o ur-apk.apk -d ur-unzipped-apk-folder
cd ./ur-unziped-apk-folder
zip -n "resources.arsc" -qr ../zipped.apk *
Run Code Online (Sandbox Code Playgroud)
根据官方文档,使用此 zipped.apk 进行对齐和签名。
注意 - 如果面向 Android 11(API 级别 30)或更高版本的应用包含压缩的 resources.arsc 文件或该文件未在 4 字节边界上对齐,则无法安装
https://developer.android.com/about/versions/11/behavior-changes-11#app-packaging https://developer.android.com/studio/build/building-cmdline#sign_cmdline
如果您进行 zipalign 然后使用旧版本进行签名,jarsigner那么它将在签名过程中取消对齐!
请务必使用较新的apksigner. 在我的系统上它位于~/Android/Sdk/build-tools/32.0.0/apksigner
这是我的 repack-n-sign 脚本。请注意,您可能需要更新 BUILD_TOOLS 路径并将其设置为正确的位置:
#!/bin/sh
BUILD_TOOLS=~/Android/Sdk/build-tools/32.0.0/
if [ -z "$1" ]; then
echo "usage: $0 your-app.apk"
exit 1
fi
DIR=`mktemp -d`
DN=`dirname "$1"`
BN=`basename "$1"`
OUT="$DN/repacked-$BN"
OUT_ALIGNED="$DN/aligned-$BN"
OUT_SIGNED="$DN/signed-$BN"
# Debug mode
set -x
# Repack without the META-INF in case it was already signed
# and flag resources.arsc as no-compress:
unzip -q "$1" -d "$DIR"
pushd .
cd $DIR
rm -rf "$DIR/META-INF"
zip -n "resources.arsc" -r ../repacked.$$.apk *
popd
mv "$DIR/../repacked.$$.apk" "$OUT"
# Align
rm -f "$OUT_ALIGNED"
"$BUILD_TOOLS"/zipalign -p -v 4 "$OUT" "$OUT_ALIGNED"
# Verify
"$BUILD_TOOLS"/zipalign -vc 4 "$OUT_ALIGNED"
# Sign
"$BUILD_TOOLS"/apksigner sign -verbose -ks ~/my-release-key.keystore --out "$OUT_SIGNED" "$OUT_ALIGNED"
# Cleanup
rm -rf "$DIR"
echo == Done: $OUT_ALIGNED
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22991 次 |
| 最近记录: |