Android R使用多个应用程序进行命名间隔

时间:2019-05-06 12:57:02

标签: android android-gradle android-resources

我有2个android应用。 appA取决于模块assetsappB取决于moduleBmoduleB也取决于assets

我正在尝试使R命名空间并为此添加gradle属性: android.namespacedRClass=true

但是,在构建项目之后,我发现moduleB无法访问assets的资源。

这是文件结构:

.
├── appA
│   └─ build
│       └── generated
│           └── not_namespaced_r_class_sources
│               └── debug
│                   └── processDebugResources
│                       └── r
│                           └── my
│                               └── package
│                                   ├── R.java
│                                   ├── moduleB
│                                   │   └── feature
│                                   │       └── R.java
│                                   └── assets
│                                       └── R.java
├── AppB
│   │
│   └── ...
├── moduleB
│   └── intermediates
│       └── compile_only_not_namespaced_r_class_jar
│           └── debug
│               └── generateDebugRFile
│                   └── R.jar
└── assets
    └── src
        └── main
            └── res
                ├── color
                │   └── ...
                ├── drawable
                │   └── ...
                └── values
                    └── ...

R.jar不包含所需的资源。并且assets R是为appA构建的(我想这就是moduleB无法访问R.java生成的assets的原因)。

我在SdkSearch应用程序中看到了这种方法,但是它使用单个应用程序模块。可以在2个应用中使用这种方法吗?

1 个答案:

答案 0 :(得分:0)

作为android项目的资产具有带有pakage声明的清单。因此,我必须从此包中导入R类:

<manifest package="my.package.assets" />


import my.package.assets.R as AssetsR
...
val image = context.getDrawable(AssetsR.drawable.image)