首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法部署到Android 11仿真器

无法部署到Android 11仿真器
EN

Stack Overflow用户
提问于 2020-08-21 22:36:38
回答 1查看 3.2K关注 0票数 1

无法部署到Android 11模拟器。(我可以部署到Android10模拟器)

代码语言:javascript
复制
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调试器签名的:

代码语言:javascript
复制
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 

万一debug.keystore已经过时了(我的是2018-03-26),我就把它移走了,它就被建好了。(有合理的大小差异),但我仍然收到了"Mono.AndroidTools.InstallFailedException: The package was not properly signed (NO_CERTIFICATES)."错误。

我试过打扫和重建。我的目标是Android11.0 (API级别为30 -R)

更新:

当我手动尝试使用亚行安装时,我收到了一些更多的信息:

代码语言:javascript
复制
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$]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-24 15:27:55

APK签名方案现在需要v2

“针对目前仅使用APK签名方案v1签名的Android 11 (API级别30)的应用程序现在也必须使用APK签名方案v2或更高版本进行签名。用户不能在运行安卓11的设备上安装或更新仅与APK签名方案v1签名的应用程序。”

当针对Android11时,用jarsigner.exe进行签名是不够的。与apksigner的签名包括v2方案。

例如,像这样的签名,使用相同的debug.keystore可以在Android11上安装apk。

手动签名

代码语言:javascript
复制
"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

通过csproj文件切换到apksigner

通过将<AndroidUseApkSigner>true</AndroidUseApkSigner>添加到csproj文件中,可以将Xamarin构建切换到apksigner。(我还没有在UI中找到这样的方法。也许这是一个实验性的特性?)

您必须使用一个相对较新的BuildTools版本来执行此操作,例如:

代码语言:javascript
复制
<AndroidSdkBuildToolsVersion>28.0.3</AndroidSdkBuildToolsVersion>

现在建筑的标志是这样的:

代码语言:javascript
复制
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$ 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63530855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档