android gradle plugin 3.6以上使用 public.xml 固定 id

 androidResources {
        File publicTxtFile = rootProject.file('public.txt')
        /*
         * public文件存在,则应用,不存在则生成 修改要固定的资源
         * 为了固定通知栏资源Id 首次 public.txt 生成不了可用,需要build一次
         * 生成后,保留需要固定的id,以后有新的id也记得要更新
         */
        if (publicTxtFile.exists()) {
            project.logger.info "${publicTxtFile} exists, apply it."
            //aapt2添加--stable-ids参数应用
            additionalParameters "--stable-ids", "${publicTxtFile}"
        } else {
            project.logger.info "${publicTxtFile} not exists, generate it."
            //aapt2添加--emit-ids参数生成 首次生成不了可以用 gradle 命令打包
            additionalParameters "--emit-ids", "${publicTxtFile}"
        }
    }

适配到 3.6.4 [废弃]

afterEvaluate {
    def android = project.getExtensions().findByName('android')
    android.getApplicationVariants().all { def variant ->
        def mergeResourceTask = project.tasks.findByName("merge${variant.getName().capitalize()}Resources")
        if (mergeResourceTask) {
            mergeResourceTask.doLast {
                //目标转换文件,注意public.xml上级目录必须带values目录,否则aapt2执行时会报非法文件路径
                def pubDir = "intermediates/res/public/${variant.getDirName()}"
                File publicXmlFile = new File(project.buildDir, "${pubDir}/values/public.xml")

                copy {
                    from(android.sourceSets.main.res.srcDirs) {
                        include 'values/public.xml'
                    }

                    into(new File(project.buildDir, pubDir))
                }

                def variantData = variant.variantData
                def scope = variantData.getScope()
                def globalScope = scope.getGlobalScope()
                def mBuildToolInfo
                try {
                    mBuildToolInfo = globalScope.androidBuilder.getTargetInfo().getBuildTools()
                } catch(Exception e) {
                    mBuildToolInfo = globalScope.sdkComponents.buildToolInfoProvider.get()
                }

                def mPaths = mBuildToolInfo.mPaths as Map<Object, String>
                def aapt2 = mPaths.keySet().find({
                    return ("AAPT2".equalsIgnoreCase(it.toString()))
                })

                def outputDir
                try {
                    outputDir = mergeResourceTask.outputDir.get().getAsFile()
                } catch(Exception e) {
                    outputDir = mergeResourceTask.outputDir
                }

                println("======= aapt2: ${mPaths.get(aapt2)}")
                println("======= outputDir: ${outputDir}")

                project.exec(new Action<ExecSpec>() {
                    @Override
                    void execute(ExecSpec execSpec) {
                        execSpec.executable ("${mPaths.get(aapt2)}")
                        execSpec.args("compile")
                        execSpec.args("--legacy")
                        execSpec.args("-o")
                        execSpec.args("${outputDir}")
                        execSpec.args("${publicXmlFile}")
                    }
                })
            }
        }
    }
}

<think>嗯,用户想了解关于IntelliJ IDEA和Maven 3.6的配置或问题。首先,我需要回忆一下Maven在IDEA中的常见配置步骤。记得Maven版本3.6可能会有一些特定的问题,比如兼容性或者插件问题。 首先,配置方面,用户可能需要知道如何在IDEA中设置Maven的安装路径和本地仓库。还有配置文件settings.xml的位置,这部分需要确认是否正确,特别是镜像仓库的配置,这会影响依赖下载速度。另外,JDK的关联也很重要,有时候Maven项目需要指定正确的JDK版本。 然后,常见问题方面,Maven 3.6IDEA中可能会遇到依赖解析失败的情况,这时候需要检查网络或者仓库配置。插件兼容性问题也比较常见,比如maven-compiler-plugin或者maven-surefire-plugin,可能需要升级版本。还有资源过滤的问题,特别是多模块项目中的路径错误。 性能优化方面,可以建议用户调整JVM参数,或者使用更快的镜像仓库,比如阿里云的镜像。另外,开启并行构建和离线模式也能提升效率。 用户提到的引用中有Maven安装的教程,可能需要引导用户检查他们的安装是否正确。另外,构建工具的比较中提到Gradle,但用户的问题集中在Maven,所以暂时不需要深入这部分。还有关于Flutter和Docker的引用可能不相关,可以忽略。 需要确保回答结构清晰,分点说明配置步骤和常见问题,每个部分都给出解决方法,并引用相关的资料帮助用户进一步排查。最后生成相关问题,覆盖版本升级、依赖冲突、与其他工具集成等可能的问题点。</think>### IntelliJ IDEA与Maven 3.6配置指南 #### 一、基础配置步骤 1. **Maven安装验证** 在IDEA中通过`File > Settings > Build, Execution, Deployment > Build Tools > Maven`确认: - Maven home path指向3.6+版本 - User settings file正确加载`settings.xml`(含镜像仓库配置) - Local repository路径无特殊字符 2. **JDK关联配置** 需在`File > Project Structure > Project`中指定与Maven项目匹配的JDK版本,例如: ```xml <properties> <java.version>11</java.version> </properties> ``` 3. **镜像加速配置** 建议在`settings.xml`中添加阿里云镜像(提升依赖下载速度): ```xml <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> ``` #### 二、常见问题排查 1. **依赖解析失败** - 现象:`Could not resolve dependencies`错误 - 解决方案: 1. 检查网络连通性(特别是企业代理设置) 2. 执行`mvn -U clean install`强制更新快照 3. 验证`settings.xml`镜像配置有效性[^1] 2. **插件兼容性问题** Maven 3.6+需注意: - `maven-compiler-plugin`建议3.8.1+版本 - `maven-surefire-plugin`需2.22.2+以支持JUnit 5 - 配置示例: ```xml <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> </plugins> ``` 3. **资源过滤异常** 多模块项目中易出现路径错误: - 在父POM中统一定义`<resources>`配置 - 使用`<directory>${project.basedir}/src/main/resources</directory>`显式指定路径 #### 三、性能优化建议 1. **JVM参数调整** 在`MAVEN_OPTS`中增加: ``` -Xmx2048m -XX:MaxPermSize=512m -Dmaven.artifact.threads=8 ``` 2. **构建加速技巧** - 启用并行构建:`mvn -T 1C clean install` - 跳过测试:`mvn -DskipTests=true` - 使用Daemon模式(需安装mvnd) $$ \text{构建时间公式参考} \\ T_{total} = T_{compile} + T_{test} + T_{package} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值