我正在尝试使用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>
谢谢!
答案 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商店。
很抱歉,如果评论很长,但我发现它对你有帮助。