Manifest配置动态替换

本文介绍了一种基于极光推送官方配置方案的动态配置替换方法,旨在减少配置侵入和关键信息暴露,支持不同构建类型的配置区分,适用于Android应用中需要灵活变更的部分。
部署运行你感兴趣的模型镜像

文章首发于我的个人博客-Manifest配置动态替换
该方案是根据极光推送的官方配置方案而来,后续将推出gradle自定义插件的方式完成配置替换

目的

减少配置侵入、关键信息暴露

便于可变配置信息引入及替换

封装动态配置定义在Library内,由app完成替换

注意:

  1. 当Library 的清单文件定义了替换key,gradle没有填写,在编译期会出现如下日志,只要app内 填写正确,运行不受影响

    日志详细信息:

   Error:
    Attribute meta-data#QQ_APPID@value at manifestMerger8142313556881373986.xml requires a placeholder substitution but no value for <QQ_APPID> is provided
  1. Library 如果与app同时配置,将会冲突导致都无效,及时Llbrary配置值为空,app已配置的也会被替换掉

Manifest 定义

  • 常规定义:”${定义的内容}”
  • 会出现数字的,读取时不会被读取为String类型,需要通过反斜杠转义 :”\ ${定义的内容}”
  • 想动态替换的内容都可定义,并由gradle 完成替换

如:

<!--动态配置meta-data的可变内容-->
<meta-data
    android:name="QQ_APPKEY"
    android:value="\ ${QQ_APPID}"/>//转义数字为String

<meta-data
    android:name="QQ_SECRET"
    android:value="${QQ_SECRET}"/>

<!--动态配置Activity的过滤器可变内容-->
 <activity>
    <intent-filter> 
        <data android:scheme="tencent${QQ_APPID}"/>
     </intent-filter>
   </activity>
<!--动态配置Receiver的过滤器可变内容-->
 <receiver>
   <intent-filter>        
    <category android:name="${JPUSH_PKGNAME}"/>
   </intent-filter>
  </receiver>

Gradle 配置替换

使用manifestPlaceholders=[]各属性间使用英文逗号分隔,注意空格

如:

 manifestPlaceholders = [
                    QQ_SECRET : "",
                    QQ_APPID : ""

            ]

当release 版本与debug需要区分时,可在buildTypes内配置

如:

 buildTypes {
        release {

            manifestPlaceholders = [
                    QQ_SECRET : "",
                    QQ_APPID : ""
            ]
        }
        debug {

            manifestPlaceholders = [
                     QQ_SECRET : "",
                    QQ_APPID : ""
            ]
        }
    }

当不需要区分时,可在defaultConfig内配置

如:

   defaultConfig {

    manifestPlaceholders = [
                    QQ_SECRET : "",
                    QQ_APPID : ""
            ]
    }

代码读取

读取Manifest定义好的key

 val appInfo = mContext?.packageManager?.getApplicationInfo(mContext?.packageName,
                PackageManager.GET_META_DATA)

val sinaKey = appInfo?.metaData?.get("QQ_APPKEY")
val sinaSecret = appInfo?.metaData?.get("QQ_SECRET")

debug 包指定签名信息

目的

不打签名包直接运行也可实现签名包的效果,可有效减少耗时

如微信分享时,需要签名信息,每次验证都打包相对耗时较长,使用该方法,不打签名包也可实现

签名文件

需在module同级目录下

gradle配置

buildTypes {
 debug {
            signingConfig signingConfigs.debug
        }
 }       

指定签名信息:

   signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

<think>好的,用户想了解如何正确配置uni-app项目的manifest.json文件。首先,我需要整理之前提供的引用内容,看看有哪些关键点。引用[1]提到manifest.json是配置文件,包含基本信息和小程序特定配置,比如插件管理。引用[4]指出在打包自定义调试基座时常见的图标路径错误,这可能涉及到图标配置的问题。用户之前的问题也涉及代码安全、多端适配,可能需要关联到manifest中的相关配置。用户可能是在开发uni-app应用时遇到了配置问题,比如插件管理、图标路径错误,或者环境加载不正确,如引用[2]中提到的manifest加载路径问题。需要分步骤讲解配置方法,包括基本配置、平台特定配置、插件管理和常见错误处理。同时,要确保回答结构清晰,符合用户给的示例结构,使用代码块和引用标识。需要涵盖manifest.json的基本结构,比如appid、版本信息,各平台配置如微信小程序的appid设置,图标路径的正确配置(引用[4]的问题),以及插件管理(引用[1])。还要提到如何调试和验证配置是否正确,比如使用Chrome开发者工具检查加载情况(引用[2])。此外,常见错误部分需要强调图标文件路径的存在和格式正确,权限声明,以及语法检查。最后,生成相关问题,可能需要包括多平台配置差异、调试方法、版本号管理、插件集成等。确保使用正确的中文表达,数学公式用$...$格式,代码块用正确语法,引用标识自然添加。同时,检查是否有遗漏的配置项,确保用户能够全面了解manifest.json的配置方法。</think>### 一、manifest.json 核心配置方法 #### 1. 基础配置结构 ```json { "name": "MyApp", // 应用名称$^{[1]}$ "appid": "__UNI__XXXXXX", // 自动生成的唯一标识 "versionName": "1.0.0", "versionCode": "100", "description": "应用描述", "uniStatistics": { // 统计功能配置 "enable": true } } ``` 需特别注意$appid$的自动生成规则:当创建新项目时,HBuilderX会自动生成带__UNI__前缀的标识符[^1] #### 2. 多平台适配配置 ```json "mp-weixin": { // 微信小程序配置 "appid": "wx1234567890abcdef", // 必须替换为真实ID "plugins": { // 插件管理[^1] "myPlugin": { "version": "1.0.0", "provider": "wxidxxxxxxxxxxxx" } }, "permission": { // 权限声明 "scope.userLocation": { "desc": "需要获取您的地理位置信息" } } } ``` 微信平台配置需满足: $$ \exists(appid) \land \text{符合正则}wx[0-9a-fA-F]{16} $$ #### 3. 图标资源配置 ```json "app-plus": { "distribute": { "icons": { "android": { "hdpi": "static/icons/72x72.png", // 分辨率对应路径[^4] "xhdpi": "static/icons/96x96.png", "xxhdpi": "static/icons/144x144.png" } } } } ``` 需验证文件路径存在性: $$ \forall(path \in icons) \rightarrow \text{FileExist}(path) $$ ### 二、调试验证流程 1. **配置加载检测** 在Chrome开发者工具中检查网络请求: `http://localhost:8080/manifest.json` 应返回200状态[^2] 2. **语法校验规则** ```shell # 使用HBuilderX校验命令 hbx manifest verify ``` 校验通过条件: $$ \text{ErrorCount} = 0 \land \text{WarningCount} \leq 3 $$ ### 三、常见错误处理 | 错误类型 | 解决方案 | 数学验证条件 | |---------|----------|-------------| | 图标路径缺失 | 检查static目录结构 | $ \frac{\text{有效路径数}}{\text{总配置数}} = 1 $ | | 插件版本冲突 | 对齐插件市场版本 | $ \text{SDK版本} \geq \text{最低支持版本} $ | | 权限声明缺失 | 补充scope描述 | $ \text{权限声明覆盖率} \geq 95\% $ | ### 配置流程图 ```mermaid graph TD A[新建项目] --> B[配置基础信息] B --> C{多平台支持?} C -->|是| D[添加平台配置] C -->|否| E[构建测试] D --> F[验证路径有效性] F --> G[权限声明检查] G --> H[打包发布] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值