228 lines
11 KiB
XML
228 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||
xmlns:tools="http://schemas.android.com/tools"
|
||
package="com.pukka.jiecheng"
|
||
tools:ignore="MissingLeanbackLauncher">
|
||
|
||
<uses-feature
|
||
android:name="android.hardware.telephony"
|
||
android:required="false" />
|
||
<uses-feature
|
||
android:name="android.software.leanback"
|
||
android:required="false" />
|
||
<uses-feature
|
||
android:name="android.hardware.touchscreen"
|
||
android:required="false" />
|
||
|
||
<uses-permission android:name="android.permission.GET_TASKS" />
|
||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
|
||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||
<uses-permission android:name="android.permission.INTERNET" /> <!-- MSA -->
|
||
<uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS" />
|
||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||
|
||
<uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||
<uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE" />
|
||
|
||
<uses-permission android:name="android.permission.SEND_SMS" />
|
||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
||
<uses-permission android:name="android.permission.REPLACE_EXISTING_PACKAGE" />
|
||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||
|
||
<!-- ===== 语音协议(文档 §6.2):自定义 signature-level permission ===== -->
|
||
<!-- debug flavor 通过 voiceProtectionLevel=normal 临时放开(联调期 adb shell 可投递);
|
||
release 走 signature 严格白名单。 -->
|
||
<permission
|
||
android:name="com.pukka.jiecheng.permission.VOICE_COMMAND"
|
||
android:protectionLevel="${voiceProtectionLevel}" />
|
||
<uses-permission android:name="com.pukka.jiecheng.permission.VOICE_COMMAND" />
|
||
|
||
<!-- ===== 语音冷启动保活(文档 2026-08-28-语音冷启动链路设计方案) ===== -->
|
||
<!-- BOOT_COMPLETED 启 FGS 必须先声明权限;FOREGROUND_SERVICE 是 Android 9+ 启前台服务的前置 -->
|
||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||
<!-- 语音冷启动绕过 Background Activity Start 限制::voice 进程挂 1px 悬浮窗,
|
||
AMS 视为有 visible window,后续 startActivity 走豁免路径。
|
||
标准权限,部分 OEM ROM 自动授予;无需运行时申请。 -->
|
||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||
|
||
<application
|
||
android:name=".MyApplication"
|
||
android:allowBackup="false"
|
||
android:hardwareAccelerated="true"
|
||
android:icon="@mipmap/ic_app"
|
||
android:label="@string/app_name"
|
||
android:largeHeap="true"
|
||
android:networkSecurityConfig="@xml/network_permission_config"
|
||
android:defaultToDeviceProtectedStorage="true"
|
||
android:requestLegacyExternalStorage="true"
|
||
android:roundIcon="@mipmap/ic_app"
|
||
android:supportsRtl="true"
|
||
android:taskAffinity=""
|
||
android:theme="@style/whiteTheme"
|
||
android:usesCleartextTraffic="true"
|
||
tools:node="merge"
|
||
tools:replace="android:name,android:allowBackup,android:theme,android:icon,android:networkSecurityConfig,android:label,android:roundIcon"
|
||
tools:targetApi="n">
|
||
<activity
|
||
android:name=".index.HotelMyActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape" />
|
||
<activity
|
||
android:name=".aboutmy.AboutMyActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape" />
|
||
<activity
|
||
android:name=".device.DeviceActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape" />
|
||
<activity
|
||
android:name=".setting.SettingActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape" />
|
||
<activity
|
||
android:name=".order.OrderActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
<activity
|
||
android:name=".list.ListActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape" />
|
||
<activity
|
||
android:name=".login.LoginActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape"
|
||
android:windowSoftInputMode="stateHidden|adjustResize" />
|
||
<!-- 家用版微信扫码登录 Activity(第一阶段占位),仅应用内启动 -->
|
||
<activity
|
||
android:name=".login.WxMpLoginActivity"
|
||
android:exported="false"
|
||
android:screenOrientation="landscape" />
|
||
<activity
|
||
android:name=".MainActivity"
|
||
android:exported="true"
|
||
android:screenOrientation="landscape"
|
||
android:theme="${splash_theme}">
|
||
<intent-filter>
|
||
<action android:name="android.intent.action.MAIN" />
|
||
|
||
<category android:name="android.intent.category.LAUNCHER" />
|
||
<category android:name="android.intent.category.DEFAULT" />
|
||
</intent-filter>
|
||
</activity>
|
||
|
||
<activity
|
||
android:name=".TestActivity"
|
||
android:exported="true"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
|
||
<activity
|
||
android:name=".video.VideoDetailActivity"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
<activity
|
||
android:name=".history.HistoryActivity"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
<activity
|
||
android:name=".index.IndexActivity"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
<activity
|
||
android:name=".search.SearchActivity"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
<activity
|
||
android:name=".web.SimpleWebActivity"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/blackTheme" />
|
||
<activity
|
||
android:name=".filter.FilterActivity"
|
||
android:screenOrientation="landscape"
|
||
android:theme="@style/whiteTheme" />
|
||
|
||
<meta-data
|
||
android:name="APP_CHANNEL_NAME"
|
||
android:value="${APP_CHANNEL_ID}" />
|
||
<!-- <meta-data
|
||
android:name="APP_CHANNEL_TYPE"
|
||
android:value="${APP_CHANNEL_TYPE}" /> -->
|
||
|
||
<provider
|
||
android:name="androidx.core.content.FileProvider"
|
||
android:authorities="${applicationId}.provider"
|
||
android:exported="false"
|
||
android:grantUriPermissions="true">
|
||
<meta-data
|
||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||
android:resource="@xml/file_paths" />
|
||
</provider>
|
||
|
||
<!-- 语音命令接收器(文档 §5.2) -->
|
||
<receiver
|
||
android:name=".voice.receiver.VoiceCommandReceiver"
|
||
android:exported="true"
|
||
android:permission="com.pukka.jiecheng.permission.VOICE_COMMAND">
|
||
<intent-filter>
|
||
<action android:name="com.pukka.jiecheng.action.VOICE_COMMAND" />
|
||
</intent-filter>
|
||
</receiver>
|
||
|
||
<!-- 语音冷启动链路:开机拉起 :voice 进程 FGS(文档 2026-08-28-语音冷启动链路设计方案) -->
|
||
<receiver
|
||
android:name=".voice.receiver.BootCompletedReceiver"
|
||
android:enabled="true"
|
||
android:exported="true"
|
||
android:directBootAware="true"
|
||
android:process=":voice"
|
||
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
|
||
<intent-filter>
|
||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||
</intent-filter>
|
||
</receiver>
|
||
|
||
<!-- 自广播兜底接收器:处理 KEEPALIVE_BOOT 自定义 action。
|
||
解决 BOOT_COMPLETED 因 STOPPED / OEM 拦截失败时 :voice 进程无法自启的问题。
|
||
同包 explicit broadcast(Intent.setPackage)不受 STOPPED 状态限制。
|
||
exported=false 不暴露给外部,仅接收应用自身 AlarmManager 派发的 PendingIntent。 -->
|
||
<receiver
|
||
android:name=".voice.receiver.KeepAlivePingReceiver"
|
||
android:enabled="true"
|
||
android:exported="false"
|
||
android:process=":voice">
|
||
<intent-filter>
|
||
<action android:name="com.pukka.jiecheng.action.KEEPALIVE_BOOT" />
|
||
</intent-filter>
|
||
</receiver>
|
||
|
||
<!-- 语音冷启动保活服务:保持 :voice 进程隔离。
|
||
设计意图:主进程被 LMK 杀掉后 receiver 仍能存活,持续监听 OEM 创维广播。
|
||
cold-launch 受 Android 12+ Background Activity Start 限制的问题,由
|
||
VoiceOverlayHelper 在 :voice 进程挂 1px TYPE_APPLICATION_OVERLAY 悬浮窗
|
||
提供 visible window 豁免(AMS 视为前台可见窗口),配合
|
||
SkyworthVoiceAdapter.coldLaunchMainActivity 优先路径
|
||
showOverlay → ctx.startActivity(cold) → hideOverlay 绕过。
|
||
FullScreenIntent 通知作为 OEM ROM 拦截悬浮窗场景下的次选兜底保留。
|
||
当前设备 Android 11 不需要 USE_FULL_SCREEN_INTENT 权限;如后续适配
|
||
Android 14 设备需在 manifest 声明该权限。 -->
|
||
<service
|
||
android:name=".voice.service.VoiceKeepAliveService"
|
||
android:exported="false"
|
||
android:foregroundServiceType="specialUse"
|
||
android:process=":voice" />
|
||
|
||
|
||
</application>
|
||
|
||
</manifest>
|