Android Studio 设置自定义资源ID public.xml

来源:互联网 发布:简历软件下载 编辑:程序博客网 时间:2024/06/06 19:27

有些项目会使用库给第三方使用,打包的一般用aar即可,有时打包成的仅仅是jar包,且代码里用到资源ID,此时打的jar包的资源ID号是默认分配的;

如果第三方集成时使用的编译资源ID会匹配不上,导致找不到资源的错误,此时需要使用自定义资源ID;


参考网上的思路,测试目前可行的办法:

1、Library端打包在build.gradle配置脚步

afterEvaluate {
    for (variant in android.libraryVariants) {
        def scope = variant.getVariantData().getScope()
        String mergeTaskName = scope.getMergeResourcesTask().name
        println "name" + mergeTaskName
        def mergeTask = tasks.getByName(mergeTaskName)


        mergeTask.doLast {
            copy {
                int i=0
                from(android.sourceSets.main.res.srcDirs) {
                    include 'values/public.xml'
                    rename 'public.xml', (i++ == 0? "public.xml": "public_${i}.xml")
                }


                into(mergeTask.outputDir)
            }
        }
    }
}


2,应用端配置build.gradle的脚步

afterEvaluate {
    for (variant in android.applicationVariants) {
        def scope = variant.getVariantData().getScope()
        String mergeTaskName = scope.getMergeResourcesTask().name
        println "name" + mergeTaskName
        def mergeTask = tasks.getByName(mergeTaskName)


        mergeTask.doLast {
            copy {
                int i=0
                from(android.sourceSets.main.res.srcDirs) {
                    include 'values/public.xml'
                    rename 'public.xml', (i++ == 0? "public.xml": "public_${i}.xml")
                }


                into(mergeTask.outputDir)
            }
        }
    }
}


3,两边都需要配置public.xml和ids.xml,使用7E开头,避免和编译器7F开头的资源ID冲突

public.xml

 <public type="drawable" name="drawable_name" id="0x7E020000" />


ids.xml

  <public type="id" name="drawable_name" id="0x7E020000" />


原创粉丝点击