使用Maven Android插件的最新版本4.0.0-rc.1,构建中似乎缺少一些类。当我启动应用程序时,我会遇到其中一个例外(启动应用程序的两种可能方式):
- java.lang.NoClassDefFoundError:android.support.v4.app.TaskStackBuilderHoneycomb
- java.lang.NoClassDefFoundError:android.support.v4.widget.EdgeEffectCompatIcs
两个缺失的类都在support-v4-21.0.0.aar/libs/internal_impl-1.0.0.jar.中
我的依赖定义:
<dependency>
<groupId>com.android.support</groupId>
<artifactId>support-v4</artifactId>
<version>21.0.0</version>
<type>aar</type>
</dependency>
这是配置错误吗?安卓Maven插件中的错误?
您需要在pom中设置以下配置:
<includeLibsJarsFromAar>true</includeLibsJarsFromAar>
所以它看起来像这样:
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
//...
<includeLibsJarsFromAar>true</includeLibsJarsFromAar>
//... rest of config
</configuration>
</plugin>
这一变化的原因是谷歌决定在aar中放入jar,这是一种不好的依赖性做法。如果您想替换版本或其他内容,则当前不可能。简而言之,它使依赖关系更难管理。
默认情况下,此设置设置为false,以阻止在libs文件夹中使用jar创建aar的行为。
更新:
使用最新的Android Maven插件(现在4.1.1即将4.2.0),该标志默认设置为true,因此您无需再添加它。
我找到了一个临时解决方案:
cp support-v4-21.0.0.aar ~/Desktop
cd ~/Desktop && mv support-v4-21.0.0.aar support-v4-21.0.0.jar
jar xf support-v4-21.0.0.jar
然后从libs
文件夹中取出internal_impl-21.0.0.jar
,如果你有,上传到你自己的artifactory,并修改你的pom文件,它应该可以工作,如果你没有自己的arti工厂,然后将它添加到类路径中。
这对我有用。
是否包含一个具有"提供"的aar依赖范围的jar文件?我想我发现了同样的错误,也有同样的问题。
https://github.com/jayway/maven-android-plugin/issues/485