我正在尝试用maven编译,但没有成功。错误: com.rhp.mobile.android E/AndroidRuntime:致命异常: main java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable
我所做的是引用android app-compact-v7lib项目。
这是pom的重要部分,我怀疑这是导致某些事情的原因:
依赖关系:
<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>编译器插件:
<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>谢谢!
发布于 2014-04-28 23:12:09
Proguard的配置是问题所在!
Maven :使用和依赖项构建的应用程序。我们添加了一个库(在我们的应用程序中)来使用ActionBar实现一个幻灯片菜单。成功地在菜单上实现了概念验证。更多信息请访问:http://developer.android.com/design/patterns/navigation-drawer.html
PROBLEM我们添加了app compat apklib项目来放置NavigationDrawer,在maven中配置lib和apklib。我们生成“用于开发”的可执行应用程序,一切都进行得很顺利。作品书店,我们没有问题,我们包括资产很好,一切都很好。
问题是,当我们创建一个apk发布候选者去Google Play Store,它生成得很好,当运行应用程序时,我们抛出以下错误:
com.rhp.mobile.android E/AndroidRuntime? FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable我们在maven步骤中使用proguard。
解决方案:
a)缺少Maven的依赖项?不是的。
b)我是不是在安装Maven存储库中遗漏了什么?不是的。
c)前卫。这就是问题所在,插件和它的设置。
什么是ProGuard?总之,ProGuard移除了我们的类中所有未使用的APK。使用外部库我们的项目,因为我们只使用库的一部分,检测到的类不会使用和删除结果文件,而是在某些情况下减小应用程序的大小。但这有时会导致R引用失败,从而导致我们的错误。
当我们将APK导出到RELEASE CANDIDATE时,而不是在仿真器/设备中运行时,Proguard才起作用。基本上是因为不可能对混淆的代码使用debug。
然后,在我们的项目中,我们在末尾创建文件proguard.conf这4行:
# # # # - Support Library v7 -
-dontwarn android.support.v7. **
-keep class ** {* android.support.v7.; }
-keep interface android.support.v7 ** {*.; }有了这个,我们创建了发布候选版本。注册并排队,准备进入Google Play商店。
如果评论是冗长的解释,很抱歉,但我发现它对你很有帮助。
https://stackoverflow.com/questions/22967275
复制相似问题