无法部署到Android 11模拟器。(我可以部署到Android10模拟器)
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 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)
更新:
当我手动尝试使用亚行安装时,我收到了一些更多的信息:
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$]发布于 2020-08-24 15:27:55
“针对目前仅使用APK签名方案v1签名的Android 11 (API级别30)的应用程序现在也必须使用APK签名方案v2或更高版本进行签名。用户不能在运行安卓11的设备上安装或更新仅与APK签名方案v1签名的应用程序。”
当针对Android11时,用jarsigner.exe进行签名是不够的。与apksigner的签名包括v2方案。
例如,像这样的签名,使用相同的debug.keystore可以在Android11上安装apk。
手动签名
"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版本来执行此操作,例如:
<AndroidSdkBuildToolsVersion>28.0.3</AndroidSdkBuildToolsVersion>现在建筑的标志是这样的:
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$ https://stackoverflow.com/questions/63530855
复制相似问题