gpt4 book ai didi

android - 库可以依赖并从另一个多样式库中读取资源吗?

转载 作者:行者123 更新时间:2023-11-30 05:07:46 26 4
gpt4 key购买 nike

使用:Android Studio 3.2.1-Gradle 4.6

我有一个包含3个模块的应用程序::app:lib1(库):lib2(库)
:app取决于lib1和lib2:lib 1取决于lib2
lib2是一个模块,仅包含从:app和:lib1引用的资源(通常是图像,字符串,颜色和值的res文件夹,而不是Java代码)

我想用相同的样式来修饰:app模块和:lib2模块(为我的客户定制应用程序,为每个应用程序指定不同的包)。 :lib1没有味道

在添加调味料之前,所有方法都正确。
我在:app模块和:lib2模块中添加了1种口味,称为“ client1”。
我在:lib2 \ src \ client1中添加了一个“ client1”文件夹到:lib2。

Gradle编译为以下内容创建了相关的构建变体:
:app-client1Debug
:app-client1发布
:lib1-Debug
:lib1-发布
:lib2-client1Debug
:lib2-client1发布

我运行调试构建变体,并正确安装了应用程序,并成功地从:lib2模块的client1风格中获取了正确的资源

现在,我在:app和:lib2模块中添加了第二个样式,即“ client2”,并在“:lib2 \ src \ client2”中添加了一个文件夹,用于第二个客户定制的样式资源。
我在库模块:lib2的:app和:lib1的gradle文件中添加了productFlavors和配置以及相对依赖项

    APP MODULE GRADLE FILE
apply plugin: 'com.android.application'
android {
defaultConfig {
applicationId "it.test.myapp"
.
.

}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}

flavorDimensions "default"
productFlavors {
client1 {
dimension="default"
versionNameSuffix "-client1"
applicationIdSuffix ".client1"
}
client2 {
dimension="default"
versionNameSuffix "-client2"
applicationIdSuffix ".client2"
}
}
}
configurations {
client1DefaultDebugCompile
client1DefaultReleaseCompile
client2DefaultDebugCompile
client2DefaultReleaseCompile
}

dependencies {
// implementation project(':lib2') //before flavors
implementation project(':lib1')

client1DefaultDebugCompile project(path: ':lib2', configuration: 'client1Debug')
client1DefaultReleaseCompile project(path: ':lib2', configuration: 'client1Release')

client2DefaultDebugCompile project(path: ':lib2', configuration: 'client2Debug')
client2DefaultReleaseCompile project(path: ':lib2', configuration: 'client2Release')


implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ....
. . .
}


:lib1 MODULE GRADLE FILE

apply plugin: 'com.android.library'
android {

....some configuration
defaultConfig {
...some configuration

}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
configurations {
client1DefaultDebugCompile
client1DefaultReleaseCompile
client2DefaultDebugCompile
client2DefaultReleaseCompile
}
dependencies {
//implementation project(':lib2') //before flavors
client1DefaultDebugCompile project(path: ':lib2', configuration: 'client1Debug')
client1DefaultReleaseCompile project(path: ':lib2', configuration: 'client1Release')

client2DefaultDebugCompile project(path: ':lib2', configuration: 'client2tDebug')
client2DefaultReleaseCompile project(path: ':lib2', configuration: 'client2Release')


implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation ...
....some implementation
}


:lib2 MODULE GRADLE FILE

apply plugin: 'com.android.library'
android {

publishNonDefault true

...some config



defaultConfig {
...some config

}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}

flavorDimensions "default"
productFlavors {
client1 {
dimension="default"
}
client2 {
dimension="default"
}
}
}

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar'])
...some implementation
}


我期望:app和:lib1模块都采用正确的:lib2模块资源版本。
我将gradle与构建变体同步:
:app-client1Debug
:lib1-Debug //没有味道
:lib2-client1Debug

gradle同步过程以一个异常结束:
:app:processClient1DebugResources失败
失败:构建失败,发生异常。
    •出了什么问题:任务':app:processClient1DebugResources'的执行失败。Android资源链接失败输出:/Users/davide/Documents/......./android/MyApp/app/build/intermediates/incremental/mergeClient1DebugResources /merged.dir/values/values.xml:2601:错误:找不到资源颜色/ colorPrimary(又名it.test.myapp.client1:color / colorPrimary)。

以及其他类似的错误:链接:lib1应该从:lib2 client1风格中获取的其他资源。

似乎:lib1软件包无法读取那些资源
如果我尝试从菜单“ Build-> Rebuild Project”进行重建,则会收到类似的错误:

:lib1:javaPreCompileDebug /Users/davide/Documents/...../android/MyApp/lib1/src/main/java/it/test/lib1/utils/Utils.java:183:错误:找不到符号textView。 setTextColor(MyApplication.getInstance()。getResources()。getColor(R.color.colorPrimaryDark)); ^符号:变量colorPrimaryDark位置:类颜色
    ....
    .....
/Users/davide/Documents/......../android/MyApp/lib1/src/main/java/it/test/lib1/utils/Utils.java:228:错误:找不到符号字符串channelId = context.getString(R.string.default_notification_channel_id); ^符号:变量default_notification_channel_id位置:类字符串
    。
    。 ....其他类似的错误
    。
    。
    。
    注意:某些输入文件使用或覆盖不推荐使用的API。
    注意:有关详细信息,请使用-Xlint:deprecation重新编译。 50个错误:lib1:compileDebugJavaWithJavac FAILED
    失败:构建失败,发生异常。
        •出了什么问题:任务':lib1:compileDebugJavaWithJavac'的执行失败。有关详细信息,请参见编译器错误输出。
        •尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。与--scan一起运行以获取完整的见解。
    *在 https://help.gradle.org获得更多帮助



如果我选择构建变体
:app-client2Debug
:lib1-Debug //没有味道
:lib2-client2Debug

我对client2风味有相同的错误,:lib1无法读取这些资源。
现在有人告诉我正确的解决方案?一个库可以具有依赖项并从另一个FLAVORED库中读取资源吗?
我读了这个 https://android.jlelse.eu/product-flavors-for-android-library-d3b2d240fca2
而这个 https://proandroiddev.com/advanced-android-flavors-part-1-building-white-label-apps-on-android-ade16af23bcf
而这个 Android multi flavor library referenced from non flavor application - AAPT: No resource found
和其他人...虽然我是对的...但是...

//更新
如果我从:lib2 gradle文件中删除了风味,并且从:app和:lib1中删除了它的依赖项风味配置,但同时维护了具有这两种风味的:app模块,则该应用会运行并已安装了boh变体和正确的versionNameSuffix,我认为我是我缺少:lib1的配置中的某些内容,以使其能够从:lib2的正确样式读取资源。

有人可以帮忙吗?谢谢

最佳答案

您的要求,不可行。像往常一样,该库不使用其他库的内部资源,而是使用库API,并且可以通过程序包名称访问资源,如果您的缺陷更改了,请记住更改其他库中的每个引用。请勿在其他参考文献上使用瑕疵路径。

关于android - 库可以依赖并从另一个多样式库中读取资源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com