Android支持库和Maven的NoClassDefFoundError



使用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

相关内容

  • 没有找到相关文章

最新更新