【问题标题】:reference android apklib with maven?用maven引用android apklib?
【发布时间】:2014-04-28 23:12:08
【问题描述】:

我正在尝试使用 maven 进行编译,但没有成功。 错误:com.rhp.mobile.android E/AndroidRuntime:致命异常:主要 java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable

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

这是我可能怀疑导致某些事情的 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>

谢谢!

【问题讨论】:

标签: android maven


【解决方案1】:

Proguard的配置有问题!

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

问题 我们添加app compat v7 lib项目来放置NavigationDrawer,在maven中配置lib和apklib。 我们生成“用于开发”的可执行应用程序,一切顺利。 作品书店,我们没有问题,我们很好地包含资产,一切都很好。

问题是当我们创建一个 apk RELEASE CANDIDATE 去 Google Play Store 时,它​​生成的很好,当 RUN THE APP 时,我们 抛出以下错误:

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

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

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

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

有了这个,我们创建了发布候选。签名并排队,准备上 Google Play 商店。

对不起,如果评论是长解释,但我发现它对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 2013-03-12
    • 2013-09-18
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多