Tom*_*Tom 1 xamarin.android xamarin visual-studio-2019
无法部署到 Android 11 模拟器。(我可以部署到Android 10模拟器)
ADB0010: Deployment failed
Mono.AndroidTools.InstallFailedException: The package was not properly signed (NO_CERTIFICATES).
at Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName)
at Mono.AndroidTools.AndroidDevice.<>c__DisplayClass97_0.<InstallPackage>b__0(Task`1 t)
at System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at AndroidDeviceExtensions.<PushAndInstallPackage>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at AndroidDeviceExtensions.<PushAndInstallPackage>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Xamarin.AndroidTools.AndroidDeploySession.<InstallPackage>d__116.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Xamarin.AndroidTools.AndroidDeploySession.<RunAsync>d__110.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Xamarin.AndroidTools.AndroidDeploySession.<RunLoggedAsync>d__108.MoveNext()
Run Code Online (Sandbox Code Playgroud)
这是一个调试版本,因此我没有明确对其进行签名。
但我注意到它会自动使用 androiddebugkey 进行签名:
C:\Program Files\Android\Jdk\microsoft_dist_openjdk_1.8.0.25\bin\jarsigner.exe -keystore "C:\Users\$USERNAME$\AppData\Local\Xamarin\Mono for Android\debug.keystore" -storepass android -keypass android -digestalg SHA-256 -sigalg SHA256withRSA -signedjar bin\Debug\$UNSIGNEDAPKNAME$.apk $PATHTOAPK$.apk androiddebugkey
Run Code Online (Sandbox Code Playgroud)
如果 debug.keystore 不知何故已经过时(我的时间戳为 2018-03-26),我将其删除并由构建重新生成。(有合理的大小差异),但我仍然收到错误"Mono.AndroidTools.InstallFailedException: The package was not properly signed (NO_CERTIFICATES)."。
我尝试过清理和重建。我的目标是 Android 11.0(API 级别 30 -R)
更新:
当我手动尝试使用 adb 安装时,我收到了更多信息:
adb -e install $myapp$.apk
...
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package $PACKAGE$]
Run Code Online (Sandbox Code Playgroud)
“当前仅使用 APK 签名方案 v1 进行签名的面向 Android 11(API 级别 30)的应用现在也必须使用 APK 签名方案 v2 或更高版本进行签名。用户无法安装或更新仅使用 APK 签名方案进行签名的应用v1 在运行 Android 11 的设备上。”
当针对 android 11 时,使用 jarsigner.exe 进行签名还不够好。使用 apksigner 进行签名,包括 v2 方案。
例如像这样签名,使用相同的签名debug.keystore允许 apk 安装在 android 11 上。
"C:\Program Files (x86)\Android\android-sdk\build-tools\30.0.2\apksigner.bat" sign -ks "C:\Users\%USERNAME%\AppData\Local\Xamarin\Mono for Android\debug.keystore" --ks-pass "pass:android" $APKNAME$.apk
Run Code Online (Sandbox Code Playgroud)
<AndroidUseApkSigner>true</AndroidUseApkSigner>通过添加到 csproj 文件,可以将 Xamarin 版本切换到 apksigner 。(我还没有找到在用户界面中执行此操作的方法。也许这是一个实验性功能?)
您必须使用相对较新的 BuildTools 版本才能执行此操作,例如:
<AndroidSdkBuildToolsVersion>28.0.3</AndroidSdkBuildToolsVersion>
Run Code Online (Sandbox Code Playgroud)
现在构建对 apk 进行签名,如下所示:
C:\Program Files\Android\Jdk\microsoft_dist_openjdk_1.8.0.25\bin\java.exe -jar "C:\Program Files (x86)\Android\android-sdk\build-tools\28.0.3\lib\apksigner.jar" sign --ks "C:\Users\%USERNAME%\AppData\Local\Xamarin\Mono for Android\debug.keystore" --ks-pass pass:android --ks-key-alias androiddebugkey --key-pass pass:android --min-sdk-version 22 --max-sdk-version 30 $APKNAME$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3860 次 |
| 最近记录: |