参考android apklib与maven?

时间:2014-04-09 15:29:58

标签: android maven

我正在尝试使用maven编译但没有成功。 错误:com.rhp.mobile.android E / AndroidRuntime:FATAL EXCEPTION:main     java.lang.NoClassDefFoundError:android.support.v7.appcompat.R $ styleable

我正在做的是引用android app-compact-v7 lib项目。

这是我怀疑造成某些事情的重要部分:

相关性:

<dependency>
<groupId>android.support</groupId>

<artifactId>compatibility-v7-appcompat</artifactId>

<version>19.0.1</version>
<type>apklib</type>
</dependency>

<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<version>19.0.1</version>
<type>jar</type>
</dependency>

COMPILER PLUGIN:

<build>
<sourceDirectory>${project.basedir}/src</sourceDirectory>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<extensions>true</extensions>
<version>3.6.1</version>
<configuration>
<sdk>
<platform>17</platform>
</sdk>
<dex>
<jvmArguments>
<jvmArgument>-Xmx1024M</jvmArgument>
</jvmArguments>
</dex>
</configuration>
<!--<configuration>-->
<!--<resourceOverlayDirectory>${resourceOverlayDirectory}</resourceOverlayDirectory>-->
<!--</configuration>-->
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<!-- During release:perform, enable the "release" profile -->
<releaseProfiles>release</releaseProfiles>
</configuration>
</plugin>
</plugins>
</build>

谢谢!

1 个答案:

答案 0 :(得分:0)

Proguard的配置就是问题!

<强>背景: 使用Maven和依赖项构建的应用程序。 我们添加了一个库(在我们的应用程序中)来实现带有ActionBar的幻灯片菜单。 在菜单上成功实施概念验证。更多信息:http://developer.android.com/design/patterns/navigation-drawer.html

<强>问题 我们添加app compat v7 lib项目来放置NavigationDrawer,在maven中配置lib和apklib。 我们生成可执行应用程序“for development”,一切顺利。 工作书店,我们没有问题,我们很好地包括资产,一切都很好。

问题是当我们创建一个apk RELEASE CANDIDATE去Google Play商店时,生成效果很好,当运行APP时,我们 抛出以下错误:

com.rhp.mobile.android E/AndroidRuntime? FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable

我们将proguard用于maven步骤。

解决方案:

a)缺少Maven的依赖关系?没有。

b)我在安装Maven存储库中遗漏了什么?没有。

c)Proguard。这就是问题,插件及其设置。

ProGuard是什么?总之,ProGuard删除了所有未使用的APK我们的课程。使用外部库我们的项目,因为我们只使用库的一部分,检测到的类 不使用和删除生成的文件,而是在某些情况下减小应用程序的大小。但这有时会导致R引用失败,从而导致我们的错误。

Proguard在我们将APK导出到RELEASE CANDIDATE时工作,而不是在模拟器/设备中运行时。基本上因为这是不可能的 使用带有混淆代码的调试。

然后,在我们的项目中,我们在最后创建文件proguard.conf这四行:

# # # # - Support Library v7 - 
-dontwarn android.support.v7. ** 
-keep class ** {* android.support.v7.; } 
-keep interface android.support.v7 ** {*.; }

通过这个我们创建候选版本。签名并排队,准备登陆Google Play商店。

很抱歉,如果评论很长,但我发现它对你有帮助。