Mat*_*t W 8 android apk xamarin.android azure-devops
我有一个 Azure 构建管道,它正在生成一个 APK,该 APK 可以在 Android 10 上正常安装(通过 AppCenter),但会弹出错误:
应用程序未安装,因为软件包似乎无效
在 Android 12 上。
解决方案中的内容AndroidManifest.xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.app.myapplocal" android:installLocation="auto" android:versionCode="1" android:versionName="1.1">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<application android:label="L MyApp" android:icon="@drawable/icon" android:largeHeap="true"></application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
当我通过 Android Studio 的选项检查清单时APK Analyze,我看到以下内容:
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="31" />
<uses-permission
android:name="android.permission.FLASHLIGHT" />
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.CAMERA" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:label="D MyApp"
android:icon="@ref/0x7f07015e"
android:name="crc646948444ac10504e5.MainApplication"
android:debuggable="true"
android:allowBackup="true"
android:largeHeap="true"
android:extractNativeLibs="true">
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="barcode" />
<activity
android:theme="@ref/0x7f0d0001"
android:label="MyApp"
android:icon="@ref/0x7f07015e"
android:name="crc646948444ac10504e5.MainActivity"
android:screenOrientation="1"
android:configChanges="0x680" />
<activity
android:theme="@ref/0x7f0d0000"
android:name="crc646948444ac10504e5.SplashActivity"
android:exported="true"
android:screenOrientation="1"
android:noHistory="true">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="Web Authenticator"
android:name="crc641e66d166111bdf3e.FormAuthenticatorActivity" />
<activity
android:label="Web Authenticator"
android:name="crc641e66d166111bdf3e.WebAuthenticatorActivity" />
<activity
android:label="Web Authenticator Native Browser"
android:name="crc641e66d166111bdf3e.WebAuthenticatorNativeBrowserActivity"
android:launchMode="1" />
<activity
android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" />
<service
android:name="crc64a98abb514ffad9f1.KeepAliveService" />
<receiver
android:label="Essentials Connectivity Broadcast Receiver"
android:name="crc64a0e0a82d0db9a07d.ConnectivityBroadcastReceiver"
android:enabled="true"
android:exported="false" />
<receiver
android:name="crc643f46942d9dd1fff9.PowerSaveModeBroadcastReceiver"
android:enabled="true"
android:exported="false" />
<provider
android:name="mono.android.MultiDexLoader"
android:exported="false"
android:authorities="com.app.myapp.mono.android.MultiDexLoader.__mono_init__"
android:initOrder="1999999999" />
<provider
android:name="mono.MonoRuntimeProvider"
android:exported="false"
android:authorities="com.app.myapp.mono.MonoRuntimeProvider.__mono_init__"
android:initOrder="1999999998" />
<activity
android:theme="@ref/0x01030010"
android:name="com.google.android.gms.common.api.GoogleApiActivity"
android:exported="false" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@ref/0x7f090008" />
</application>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
我之前认为 Android 12 的问题在于android:targetSdkVersion设置为,29但在解决方案清单中更改此设置并将项目文件的TargetFrameworkVersion从更改v11.0为v12.0也没有帮助。(这是在 Visual Studio 中使用项目属性的Application > Compile using Android version值进行更新的。)
为了允许在最新的 Android 设备上安装,我可能会缺少什么?(恐怕我不熟悉 Xamarin 或 Android。)
Let*_*aus 10
如果您已将编译版本提高到 31,那么您需要添加
android:exported="true"
Run Code Online (Sandbox Code Playgroud)
您的活动、服务和接收者。看这里。
在你的情况下
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="31" />
<uses-permission
android:name="android.permission.FLASHLIGHT" />
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.CAMERA" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:label="D MyApp"
android:icon="@ref/0x7f07015e"
android:name="crc646948444ac10504e5.MainApplication"
android:debuggable="true"
android:allowBackup="true"
android:largeHeap="true"
android:extractNativeLibs="true">
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="barcode" />
<activity
android:theme="@ref/0x7f0d0001"
android:label="MyApp"
android:icon="@ref/0x7f07015e"
android:name="crc646948444ac10504e5.MainActivity"
android:screenOrientation="1"
android:configChanges="0x680"
android:exported="true"/>
<activity
android:theme="@ref/0x7f0d0000"
android:name="crc646948444ac10504e5.SplashActivity"
android:exported="true"
android:screenOrientation="1"
android:noHistory="true">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="Web Authenticator"
android:name="crc641e66d166111bdf3e.FormAuthenticatorActivity"
android:exported="true"/>
<activity
android:label="Web Authenticator"
android:name="crc641e66d166111bdf3e.WebAuthenticatorActivity"
android:exported="true"/>
<activity
android:label="Web Authenticator Native Browser"
android:name="crc641e66d166111bdf3e.WebAuthenticatorNativeBrowserActivity"
android:launchMode="1"
android:exported="true"/>
<activity
android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity"
android:exported="true"/>
<service
android:name="crc64a98abb514ffad9f1.KeepAliveService"
android:exported="true"/>
<receiver
android:label="Essentials Connectivity Broadcast Receiver"
android:name="crc64a0e0a82d0db9a07d.ConnectivityBroadcastReceiver"
android:enabled="true"
android:exported="false" />
<receiver
android:name="crc643f46942d9dd1fff9.PowerSaveModeBroadcastReceiver"
android:enabled="true"
android:exported="false" />
<provider
android:name="mono.android.MultiDexLoader"
android:exported="false"
android:authorities="com.app.myapp.mono.android.MultiDexLoader.__mono_init__"
android:initOrder="1999999999" />
<provider
android:name="mono.MonoRuntimeProvider"
android:exported="false"
android:authorities="com.app.myapp.mono.MonoRuntimeProvider.__mono_init__"
android:initOrder="1999999998" />
<activity
android:theme="@ref/0x01030010"
android:name="com.google.android.gms.common.api.GoogleApiActivity"
android:exported="false" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@ref/0x7f090008" />
</application>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
请注意哪些内容是真正需要导出或不需要导出的,并进行相应更改。
也可能是从 Android 11 开始,应用程序中心需要强制应用程序签名者,请参阅此处、此处,以防万一,这里是代码片段
从 Android 11 开始,必须使用 APK 签名者(如果您使用 API 级别 30),因为它将设置一些额外的方案“现在需要 APK 签名方案 v2”。App Center 现在(自 2020 年 12 月 17 日起)在内部使用 APK 签名者对 Android 应用程序进行签名,而不是之前使用的 JAR 签名者。作为在 App Center 中启用 APK 签名者功能的一部分,实施了 Android 签名任务 V3,新签名任务的要求是更改密钥库文件的保存方式 - 将密钥库文件存储在 AzDO 安全文件中(Android 签名构建和发布任务 - Azure Pipelines | Microsoft Docs)。
警告 在 2020 年 12 月 17 日之前上传密钥库文件的任何构建配置仍使用 APK 签名方案 v2 签名方法 (jarsigner)。要使用 APK 签名方案 v3 签名流程,用户只需重新上传其密钥库文件并保存其分支配置。
| 归档时间: |
|
| 查看次数: |
20248 次 |
| 最近记录: |