Skip to content

终极分离与去除警告 #11

Description

@galenlin

插件的string/app_namemipmap/ic_launcher在resources.arsc中被分离以减少插件包大小。
但是插件manifest的<application>标签仍包含对二者的引用,其资源ID在编译阶段被替换成了宿主的。
在对插件合并资源前,二者被访问了(何时尚未知),导致警告:

  W/ResourceType: No known package when getting value for resource number 0x7f060014
  W/ResourceType: No known package when getting value for resource number 0x7f030000

解决方法:过滤插件AndroidManifest.xml中的非保留资源。实现后插件将会更小,并再无缩减空间。
解决思路:修改AndroidManifest.xml二进制文件
要修改的代码(请先更新代码,以下内容已预置):
buildSrc/src/main/groovy/net/wequick/gradle/aapt/AxmlEditor.groovy

  def slice(int pp, Map idMaps, List retainedTypes) {
      // TODO: slice resources exclude `retainedTypes'
      println retainedTypes
  }

buildSrc/src/main/groovy/net/wequick/gradle/aapt/Aapt.groovy

  void filterPackage(List retainedTypes, int pp, Map idMaps) {
      File arscFile = new File(mAssetDir, 'resources.arsc')
      if (retainedTypes.size() == 0) {
          // Remove everything
          mJavaFile.write('')
          if (mSymbolFile != null) mSymbolFile.write('')
          arscFile.delete()
          return
      }  
      def arscEditor = new ArscEditor(arscFile)  
      // Filter R.java
      filterRjava(mJavaFile, retainedTypes, null)
      // Filter R.txt
      if (mSymbolFile != null) filterRtext(mSymbolFile, retainedTypes)
      // Filter resources.arsc
      arscEditor.slice(pp, idMaps, retainedTypes)  
      // Filter AndroidManifest.xml
      File manifest = new File(mAssetDir, 'AndroidManifest.xml')
      AXmlEditor xmlEditor = new AXmlEditor(manifest)
      xmlEditor.slice(pp, idMaps, retainedTypes)
      // Reset xml package id
      File resDir = new File(mAssetDir, 'res')
      resetAllXmlPackageId(resDir, pp, idMaps)
  }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions