我有一个Azure构建管道,它正在生成一个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>当我通过Android的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" />我以前曾想过,Android12的问题在于android:targetSdkVersion被设置为29,但是在解决方案的清单中更改这一点,以及将项目文件的TargetFrameworkVersion从v11.0更改为v12.0也没有帮助。(这是在Visual中使用项目属性的Application > Compile using Android version值进行更新的。)
为了允许在最近的Android设备上安装,我可能遗漏了什么?(恐怕我对Xamarin或Android并不熟悉。)
发布于 2022-02-07 17:11:50
如果您已经将编译版本设置为31,则需要添加
android:exported="true"敬你的活动、服务和接受者。见这里。
在你的情况下
<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" />请小心什么真正需要出口或不出口,并相应地改变。
也可能是因为App在Android11中需要一个强制的应用程序签名者,请参阅这里,这里,以防万一,下面是代码片段
从Android11开始,就必须使用APK签名器(如果您使用API 30),因为它将设置一些额外的方案"APK签名方案v2现在需要“。App现在(自2020年12月17日起)在内部使用APK签名器,而不是以前使用的JAR签名器来签署Android应用程序。作为在应用程序中心启用APK签名器功能的一部分,安卓签名任务V3已经实现,对新签名任务的要求是更改密钥存储库文件的保存方式--将密钥存储库文件存储在AzDO安全文件中(Android签名、构建和发布任务-- Azure管道- Microsoft Docs)。警告任何在2020年12月17日之前上传了密钥存储库文件的构建配置仍然使用APK签名方案v2签名方法(jarsigner)。要使用APK签名方案v3签名流程,用户只需重新上传密钥存储库文件并保存分支配置即可。
发布于 2022-02-07 17:19:28
这可能是因为它不喜欢安装位置的“自动”,因此:
android:installLocation="0"其中一项应是:
android:installLocation=["auto" | "internalOnly" | "preferExternal"]https://stackoverflow.com/questions/71022310
复制相似问题