HHoris优化
d4f7a08c创建于 2025年3月2日历史提交
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${app_name}"
        android:networkSecurityConfig="@xml/network_security_config"
        android:requestLegacyExternalStorage="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme.Light"
        tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
        <!-- 主入口 -->
        <activity
            android:name=".ui.welcome.WelcomeActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 图标1 -->
        <activity
            android:name=".ui.welcome.Launcher1"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/launcher1">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 图标2 -->
        <activity
            android:name=".ui.welcome.Launcher2"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/launcher2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 图标3 -->
        <activity
            android:name=".ui.welcome.Launcher3"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/launcher3">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 图标4 -->
        <activity
            android:name=".ui.welcome.Launcher4"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/launcher4">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 图标5 -->
        <activity
            android:name=".ui.welcome.Launcher5"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/launcher5">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 图标6 -->
        <activity
            android:name=".ui.welcome.Launcher6"
            android:enabled="false"
            android:exported="true"
            android:icon="@mipmap/launcher6">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 主界面 -->
        <activity
            android:name=".ui.main.MainActivity"
            android:alwaysRetainTaskState="true"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|uiMode"
            android:exported="true"
            android:launchMode="singleTask" />
        <!-- 阅读界面 -->
        <activity
            android:name=".ui.book.read.ReadBookActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:exported="true"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="com.samsung.android.support.REMOTE_ACTION" />
            </intent-filter>

            <meta-data
                android:name="com.samsung.android.support.REMOTE_ACTION"
                android:resource="@xml/spen_remote_actions" />
        </activity>

        <!-- 阅读漫画界面 -->
        <activity
            android:name=".ui.book.manga.ReadMangaActivity"
            android:exported="false"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="com.samsung.android.support.REMOTE_ACTION" />
            </intent-filter>

            <meta-data
                android:name="com.samsung.android.support.REMOTE_ACTION"
                android:resource="@xml/spen_remote_actions" />
        </activity>
        <!-- 书籍详情页 -->
        <activity
            android:name=".ui.book.info.BookInfoActivity"
            android:launchMode="singleTop" />
        <!-- 书籍信息编辑 -->
        <activity
            android:name=".ui.book.info.edit.BookInfoEditActivity"
            android:launchMode="singleTask" />
        <!-- 音频播放界面 -->
        <activity
            android:name="io.legado.app.ui.book.audio.AudioPlayActivity"
            android:launchMode="singleTask" />
        <!-- 授权界面 -->
        <activity
            android:name="io.legado.app.lib.permission.PermissionActivity"
            android:theme="@style/Activity.Permission" />
        <!-- 二维码扫描 -->
        <activity
            android:name=".ui.qrcode.QrCodeActivity"
            android:launchMode="singleTask" />
        <!-- 规则订阅 -->
        <activity
            android:name=".ui.rss.subscription.RuleSubActivity"
            android:launchMode="singleTask" />
        <!-- 书源编辑 -->
        <activity
            android:name=".ui.book.source.edit.BookSourceEditActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize|stateHidden" />
        <!-- 订阅源编辑 -->
        <activity
            android:name=".ui.rss.source.edit.RssSourceEditActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize|stateHidden" />
        <!-- 替换规则编辑 -->
        <activity
            android:name=".ui.replace.edit.ReplaceEditActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize|stateHidden" />
        <!-- 配置界面 -->
        <activity
            android:name=".ui.config.ConfigActivity"
            android:launchMode="standard" />
        <!-- 搜索界面 -->
        <activity
            android:name=".ui.book.search.SearchActivity"
            android:launchMode="standard" />
        <!-- 关于界面 -->
        <activity
            android:name=".ui.about.AboutActivity"
            android:launchMode="singleTask"
            android:screenOrientation="behind" />
        <!-- 书源管理 -->
        <activity
            android:name=".ui.book.source.manage.BookSourceActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- 订阅源管理 -->
        <activity
            android:name=".ui.rss.source.manage.RssSourceActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- txt目录规则管理 -->
        <activity
            android:name=".ui.book.toc.rule.TxtTocRuleActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- 替换规则界面 -->
        <activity
            android:name=".ui.replace.ReplaceRuleActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- 书籍管理 -->
        <activity
            android:name=".ui.book.manage.BookshelfManageActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- 书源调试 -->
        <activity
            android:name=".ui.book.source.debug.BookSourceDebugActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- 目录 -->
        <activity
            android:name=".ui.book.toc.TocActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- 正文搜索 -->
        <activity
            android:name=".ui.book.searchContent.SearchContentActivity"
            android:launchMode="singleTop"
            android:screenOrientation="behind" />
        <!-- RSS条目 -->
        <activity
            android:name=".ui.rss.article.RssSortActivity"
            android:launchMode="singleTop" />
        <!-- RSS阅读 -->
        <activity
            android:name=".ui.rss.read.ReadRssActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop" />
        <!-- 导入书籍 -->
        <activity
            android:name=".ui.book.import.local.ImportBookActivity"
            android:launchMode="singleTop" />
        <!-- 添加远程 -->
        <activity
            android:name=".ui.book.import.remote.RemoteBookActivity"
            android:launchMode="singleTop" />
        <!-- 发现界面 -->
        <activity
            android:name=".ui.book.explore.ExploreShowActivity"
            android:launchMode="singleTop" />
        <!-- 订阅源调试 -->
        <activity
            android:name=".ui.rss.source.debug.RssSourceDebugActivity"
            android:launchMode="singleTop" />
        <!-- Rss收藏 -->
        <activity
            android:name=".ui.rss.favorites.RssFavoritesActivity"
            android:launchMode="singleTop" />
        <!-- 书签 -->
        <activity
            android:name=".ui.book.bookmark.AllBookmarkActivity"
            android:launchMode="singleTop" />
        <!-- 缓存界面 -->
        <activity
            android:name=".ui.book.cache.CacheActivity"
            android:launchMode="singleTop" />
        <!-- WebView界面 -->
        <activity
            android:name=".ui.browser.WebViewActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:launchMode="standard" />
        <!-- 书源登录 -->
        <activity
            android:name="io.legado.app.ui.login.SourceLoginActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true"
            android:theme="@style/AppTheme.Transparent" />
        <!-- 阅读记录 -->
        <activity
            android:name=".ui.about.ReadRecordActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" />
        <!-- 字典管理 -->
        <activity
            android:name=".ui.dict.rule.DictRuleActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" />
        <!-- 文件管理 -->
        <activity
            android:name=".ui.file.FileManageActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" />
        <!-- 选择文件 -->
        <activity
            android:name=".ui.file.HandleFileActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true"
            android:theme="@style/AppTheme.Transparent" />
        <!-- 文字处理 -->
        <activity
            android:name=".receiver.SharedReceiverActivity"
            android:exported="true"
            android:label="@string/receiving_shared_label"
            android:theme="@style/AppTheme.Transparent">
            <intent-filter>
                <action android:name="android.intent.action.PROCESS_TEXT" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
        <!-- 一键导入 -->
        <activity
            android:name=".ui.association.OnLineImportActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:exported="true"
            android:theme="@style/AppTheme.Transparent">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="legado" />
                <data android:scheme="yuedu" />
            </intent-filter>
        </activity>
        <!-- 验证码输入 -->
        <activity
            android:name=".ui.association.VerificationCodeActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:theme="@style/AppTheme.Transparent" />
        <!-- 跳转确认 -->
        <activity
            android:name=".ui.association.OpenUrlConfirmActivity"
            android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
            android:theme="@style/AppTheme.Transparent" />
        <!-- 打开文件 -->
        <activity
            android:name=".ui.association.FileAssociationActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/AppTheme.Transparent">
            <!-- VIEW (Open with) action -->
            <!-- Works when an app knows the media type of a file, e.g. Gmail or Chrome. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="app" />
                <data android:scheme="content" />
                <data android:scheme="file" />
                <!-- text -->
                <data android:mimeType="text/plain" />
                <!-- json -->
                <data android:mimeType="application/json" />
                <!-- EPUB -->
                <data android:mimeType="application/epub+zip" />
                <!-- pdf -->
                <data android:mimeType="application/pdf" />
                <!-- mobi -->
                <data android:mimeType="application/mobi" />
                <data android:mimeType="application/x-mobipocket-ebook" />
                <!-- azw/azw3 -->
                <data android:mimeType="application/azw" />
                <data android:mimeType="application/azw3" />
                <data android:mimeType="application/x-mobi8-ebook" />
                <data android:mimeType="application/octet-stream" />
            </intent-filter>
            <!-- Works when an app doesn't know the media type, e.g. Dropbox -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:host="*" />

                <data android:scheme="app" />
                <data android:scheme="content" />
                <data android:scheme="file" />
                <!-- This media type is necessary, otherwise it won't match on the file extension -->
                <data android:mimeType="*/*" />
                <!--TXT-->
                <data android:pathAdvancedPattern=".*\\.[tT][xX][tT]" />
                <data android:pathPattern=".*\\.txt" />
                <data android:pathPattern=".*\\.TXT" />
                <!--JSON-->
                <data android:pathAdvancedPattern=".*\\.[jJ][sS][oO][nN]" />
                <data android:pathPattern=".*\\.json" />
                <data android:pathPattern=".*\\.JSON" />
                <!-- EPUB -->
                <data android:pathAdvancedPattern=".*\\.[eE][pP][uU][bB]" />
                <data android:pathPattern=".*\\.epub" />
                <data android:pathPattern=".*\\.EPUB" />
                <!-- pdf -->
                <data android:pathAdvancedPattern=".*\\.[pP][dD][fF]" />
                <data android:pathPattern=".*\\.pdf" />
                <data android:pathPattern=".*\\.PDF" />
                <!-- mobi -->
                <data android:pathAdvancedPattern=".*\\.[mM][oO][bB][iI]" />
                <data android:pathPattern=".*\\.mobi" />
                <data android:pathPattern=".*\\.MOBI" />
                <!-- azw -->
                <data android:pathAdvancedPattern=".*\\.[aA][zZ][wW]" />
                <data android:pathPattern=".*\\.azw" />
                <data android:pathPattern=".*\\.AZW" />
                <!-- azw3 -->
                <data android:pathAdvancedPattern=".*\\.[aA][zZ][wW]3" />
                <data android:pathPattern=".*\\.azw3" />
                <data android:pathPattern=".*\\.AZW3" />
                <!-- zip -->
                <data android:pathAdvancedPattern=".*\\.[zZ][iI][pP]" />
                <data android:pathPattern=".*\\.zip" />
                <data android:pathPattern=".*\\.ZIP" />
                <!-- rar -->
                <data android:pathAdvancedPattern=".*\\.[rR][aA][rR]" />
                <data android:pathPattern=".*\\.rar" />
                <data android:pathPattern=".*\\.RAR" />
                <!-- 7z -->
                <data android:pathAdvancedPattern=".*\\.7[zZ]" />
                <data android:pathPattern=".*\\.7z" />
                <data android:pathPattern=".*\\.7Z" />
            </intent-filter>
        </activity>

        <service
            android:name=".service.CheckSourceService"
            android:foregroundServiceType="dataSync" />
        <service
            android:name=".service.CacheBookService"
            android:foregroundServiceType="dataSync" />
        <service
            android:name=".service.ExportBookService"
            android:foregroundServiceType="dataSync" />
        <service
            android:name=".service.WebService"
            android:foregroundServiceType="dataSync" />
        <service
            android:name=".service.WebTileService"
            android:exported="true"
            android:foregroundServiceType="dataSync"
            android:icon="@drawable/ic_web_service_noti"
            android:label="legado Web Service"
            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
            tools:targetApi="24">
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE" />
            </intent-filter>
        </service>
        <service
            android:name=".service.TTSReadAloudService"
            android:foregroundServiceType="mediaPlayback" />
        <service
            android:name=".service.HttpReadAloudService"
            android:foregroundServiceType="mediaPlayback" />
        <service
            android:name=".service.AudioPlayService"
            android:foregroundServiceType="mediaPlayback" />
        <service
            android:name=".service.DownloadService"
            android:foregroundServiceType="dataSync" />

        <receiver
            android:name=".receiver.MediaButtonReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </receiver>

        <provider
            android:name=".api.ReaderProvider"
            android:authorities="${applicationId}.readerProvider"
            android:enabled="true"
            android:exported="true"
            tools:ignore="ExportedContentProvider" />
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
        <provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            android:exported="false"
            tools:node="merge">
            <meta-data
                android:name="androidx.emoji2.text.EmojiCompatInitializer"
                tools:node="remove" />
        </provider>

        <meta-data
            android:name="channel"
            android:value="${APP_CHANNEL_VALUE}" />
    </application>

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="*" />
        </intent>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data
                android:mimeType="*/*"
                android:scheme="*" />
        </intent>
        <intent>
            <action android:name="android.intent.action.TTS_SERVICE" />
        </intent>
        <intent>
            <action android:name="android.intent.action.PROCESS_TEXT" />
            <data android:mimeType="text/plain" />
        </intent>
    </queries>

</manifest>