gpt4 book ai didi

Android 构建不会合并库中的 list

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:03:20 26 4
gpt4 key购买 nike

我们有多个项目,依赖于许多 Android 库模块。为了避免应用程序 list 中出现重复的 xml 标记,我们将相关的接收器、服务和 Activity 放在它们各自的模块中。

直到今天,我们使用:

  • 安卓工作室:2.2.1
  • 等级:2.1.3
  • 构建工具版本:23.0.3

今天我们更新到:

  • 安卓工作室:2.3
  • 等级:2.3.0
  • 构建工具版本:25.0.0

在此更新之前,一切正常, list 已合并,我们遇到了冲突并修复了它们。在我们完成的更新中, list 根本不会合并!!

--- 更新 1 ---

我们使用了 Merged Manifest View ,发现它只是不包括合并中的 list ,它唯一从模块 list 中合并的是权限,例如,如果我添加一个新的对模块 list 的许可它只会合并它而不是其余的元素!

Nothing to merge

我保证有很多东西要合并!

--- 更新 2 ---

似乎应用程序标签的所有内容都合并到主 list 中,而应用程序标签的所有内容似乎都没有。

--- 更新 3 ---

不合并的模块:

Gradle :

apply plugin: 'com.android.library'

android {
compileSdkVersion 23
buildToolsVersion '25.0.0'

defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
jniDebuggable true
}
}
}

dependencies {
compile project(path: ':android-infra')
compile 'com.google.android.gms:play-services-gcm:9.0.0'
compile project(path: ':engine-core-server')
compile project(path: ':engine-core-aneeda')
}

list :

<manifest package="com.sensiya.voip.managers.gcm"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="com.google.android.c2dm.permission.KAKI"/>


<application
tools:node="replace">
<service
android:enabled="true"
android:name="com.sensiya.voip.managers.gcm.GcmIntentService"/>

<receiver android:name="com.sensiya.voip.managers.gcm.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>

<category android:name="com.iamplus.onenumber.device"/>
</intent-filter>
</receiver>
</application>
</manifest>

将合并的模块:

Gradle :

apply plugin: 'com.android.library'

android {
compileSdkVersion 23
buildToolsVersion '25.0.0'

defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}

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

dependencies {
compile project(path: ':android-infra')
compile 'com.sensiya:sense-services-client:1.24.2@aar'
compile project(path: ':engine-core-server')
compile project(path: ':engine-core-aneeda')
}

list :

<manifest package="com.iamplus.android.senseServices"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<application
tools:node="replace">
<service
android:name="com.iamplus.senseServices.ContextualEventService"
android:enabled="true"/>

<service
android:name="com.iamplus.senseServices.Serv"
android:enabled="true"/>

<service
android:name="com.iamplus.senseServices.Serv1"
android:enabled="true"/>
</application>
</manifest>

有什么建议吗?

最佳答案

可能有很多东西。由于您没有提供代码,我猜您使用的是默认合并行为。有关详细信息,请参阅:Merge conflict heuristics

您可以使用 Merged Manifest view预览合并 list 的结果并查找冲突错误。

一般来说,默认合并应该可以。然后只需使用Merged Manifest view 来查看在合并过程中如何丢失值以及在何处丢失值。使用Merge rule markers将帮助您通过分配规则标记来管理合并。

如果根本没有合并。所以这可能是模块之间的依赖问题。

请注意,依赖顺序对于具有相同优先级的模块(例如库)起着至关重要的作用。

--- 2017 年 4 月 5 日更新 ---

这里有一些有用的提示:

  1. 尽可能多地更新和重建其他库。
  2. 删除所有依赖项,然后清理项目,然后再次添加它们。和检查您是否正确导入它们。这可以通过毫无问题地构建项目来完成。
  3. 请注意,由于模块中的 gradle 2.2.0 Assets 将无法访问在应用程序中。
  4. 检查您的 list 是否未通过属性明确禁用合并过程:tools:node=”remove"tools:node="removeAll" 或在 gradle 中(参见这个Disable Manifest Merger in Android Gradle Build )
  5. 尝试创建一个包含模块和轨道合并的演示。然后匹配输出到您的项目。这将清楚地表明这不是配置问题,但 Android Studio 2.3(然后重新安装新的版本)

--- 2017 年 4 月 5 日更新(2) ---

添加代码后,我可以看到您正在使用 Attribute

tools:node="replace"

在您的模块中的应用程序元素下(也可能在应用程序的 list 中)。我认为这就是为什么您没有从合并到应用程序 list 的导入模块中合并任何 list 的原因。请参阅 Node markers 下的 tools:node="replace" .

Replace the lower-priority element completely. That is, if there is a matching element in the lower-priority manifest, ignore it and use this element exactly as it appears in this manifest.

这意味着上面的两个模块永远不会从 list 中合并任何东西:

  • android-infra
  • com.sensiya:sense-services-client:1.24.2
  • 引擎核心服务器
  • engine-core-aneeda

所以摆脱那个属性并清理和重建模块。然后重建整个项目。

关于Android 构建不会合并库中的 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43029443/

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