Xamarin App-不能部署到Android 11仿真器 [英] Xamarin App - Can't deploy to Android 11 emulator
本文介绍了Xamarin App-不能部署到Android 11仿真器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
无法部署到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()
这是调试版本,所以我不会显式对其签名。
但我注意到它无论如何都会自动使用android调试密钥进行签名:
C:Program FilesAndroidJdkmicrosoft_dist_openjdk_1.8.0.25injarsigner.exe -keystore "C:Users$USERNAME$AppDataLocalXamarinMono for Androiddebug.keystore" -storepass android -keypass android -digestalg SHA-256 -sigalg SHA256withRSA -signedjar binDebug$UNSIGNEDAPKNAME$.apk $PATHTOAPK$.apk androiddebugkey
如果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$]
推荐答案
APK Signature Scheme v2 now required:
目前仅使用APK签名方案v1签名的面向Android 11(API级别30)的应用程序现在也必须使用APK签名方案v2或更高版本进行签名。用户无法在运行Android 11的设备上安装或更新仅使用APK签名方案v1签名的应用。针对Android 11,使用jarsigner.exe签名不够好。使用apksigner签名,包括v2方案。
例如像这样签名,使用相同的debug.keystore
允许在Android 11上安装APK。
手动签名
"C:Program Files (x86)Androidandroid-sdkuild-tools30.0.2apksigner.bat" sign -ks "C:Users\%USERNAME%AppDataLocalXamarinMono for Androiddebug.keystore" --ks-pass "pass:android" $APKNAME$.apk
通过csproj文件切换到apksigner
通过将<AndroidUseApkSigner>true</AndroidUseApkSigner>
添加到csproj文件中,可以将Xamarin构建切换到apksigner。(我还没有找到在用户界面中实现这一点的方法。也许这是一个试验性功能?)
您必须使用相对较新的BuildTools版本来执行此操作,例如:
<AndroidSdkBuildToolsVersion>28.0.3</AndroidSdkBuildToolsVersion>
现在,内部版本对APK进行签名如下:
C:Program FilesAndroidJdkmicrosoft_dist_openjdk_1.8.0.25injava.exe -jar "C:Program Files (x86)Androidandroid-sdkuild-tools28.0.3libapksigner.jar" sign --ks "C:Users\%USERNAME%AppDataLocalXamarinMono for Androiddebug.keystore" --ks-pass pass:android --ks-key-alias androiddebugkey --key-pass pass:android --min-sdk-version 22 --max-sdk-version 30 $APKNAME$
这篇关于Xamarin App-不能部署到Android 11仿真器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文