簡體   English   中英

定位 R+(版本 30 及更高版本)要求已安裝 APK 的 resources.arsc 未壓縮存儲並在 4 字節邊界上對齊

[英]Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary

我正在嘗試將 android 目標 API 從 29 更新到 30。我已更新:

compileSdkVersion           = 30
targetSdkVersion            = 30
buildToolsVersion           = "30.0.2"

該應用程序在根據官方文檔簽名之前與zipalign -p -f -v 4對齊。

當我嘗試adb install .apk但是我得到:

失敗 [-124: installPackageLI 期間解析失敗:定位 R+(版本 30 及更高版本)要求將已安裝 APK 的 resources.arsc 未壓縮存儲並在 4 字節邊界上對齊]

有沒有人在這方面取得任何成功?

我有一個類似的問題。

為此觀察 zipalign 日志 - 在此處輸入圖片說明

它不應該被壓縮。 如果是,那是你的問題。 不知何故,您需要使其不被壓縮。 它應該看起來像

resources.arsc (OK)

試試這個——

unzip -q -o ur-apk.apk -d ur-unzipped-apk-folder
cd ur-unziped-apk-folder
zip -n "resources.arsc" -qr ../zipped.apk *

根據官方文檔,使用此 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

很抱歉提出問題,但是,我是 Stackoverflow 的新用戶,在我有足夠的聲望點之前無法對答案發表評論 - 被迫提出問題以獲得@T Aria 的澄清。

您使用的是什么 zip 實用程序,它具有“zip”和“unzip”命令來解壓縮 resources.arsc 文件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM