【问题标题】:Cannot include 3rd-party jars into Android application with the maven-android-plugin无法使用 maven-android-plugin 将 3rd-party jar 包含到 Android 应用程序中
【发布时间】:2011-04-16 14:34:25
【问题描述】:

我正在尝试使用提供的示例,但是当我添加另一个已经使用 POJO 创建的 jar 时,我无法再编译应用程序

            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>maven-android-plugin</artifactId>
                <version>2.8.4</version>
                <configuration>
                    <sdk>
                        <platform>9</platform>
                    </sdk>
                    <emulator>
                        <avd>23</avd>
                        <wait>10000</wait>
                        <!--<options>-no-skin</options>-->
                    </emulator>
                    <zipalign>
                        <verbose>true</verbose>
                    </zipalign>
                    <deleteConflictingFiles>true</deleteConflictingFiles>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
            </plugin>

当我使用我创建的 jar 时,我收到此 OOM 错误

    [INFO] solution is to recompile the class from source, using an up-to-date compiler
    [INFO] and without specifying any "-target" type options. The consequence of ignoring
    [INFO] this warning is that reflective operations on this class will incorrectly
    [INFO] indicate that it is *not* an inner class.
    [INFO]
    [INFO] UNEXPECTED TOP-LEVEL ERROR:
    [INFO] java.lang.OutOfMemoryError: Java heap space
    [INFO]  at com.android.dx.rop.code.RopMethod.calcPredecessors(RopMethod.java:153)
    [INFO]  at com.android.dx.rop.code.RopMethod.labelToPredecessors(RopMethod.java:95)
    [INFO]  at com.android.dx.dex.code.RopTranslator.pickOrder(RopTranslator.java:345)
    [INFO]  at com.android.dx.dex.code.RopTranslator.translateAndGetResult(RopTranslator.java:205)
    [INFO]  at com.android.dx.dex.code.RopTranslator.translate(RopTranslator.java:102)
    [INFO]  at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:289)
    [INFO]  at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
    [INFO]  at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
    [INFO]  at com.android.dx.command.dexer.Main.processClass(Main.java:369)
    [INFO]  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:346)
    [INFO]  at com.android.dx.command.dexer.Main.access$400(Main.java:59)
    [INFO]  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:294)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:134)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:190)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:122)
    [INFO]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
    [INFO]  at com.android.dx.command.dexer.Main.processOne(Main.java:313)
    [INFO]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:233)
    [INFO]  at com.android.dx.command.dexer.Main.run(Main.java:185)
    [INFO]  at com.android.dx.command.dexer.Main.main(Main.java:166)
    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary:
    [INFO]
    [INFO] Chapter 06: Mobile Device Parent .................. SUCCESS [0.359s]
    [INFO] Chapter 06: Mobile Device Application ............. FAILURE [1:27.859s]

我什至尝试增加内存

 set JAVA_OPTS="%JAVA_OPTS% -Xmx512m -XX:MaxPermSize=768m"

但由于某种原因还是用完了。

现在,当我尝试使用其他人的另一个 jar 时,请说 Crest,它声明它可以与 android 一起使用:

    <dependency>
        <groupId>org.codegist.crest</groupId>
        <artifactId>codegist-crest</artifactId>
    </dependency>

然后我尝试构建并得到这个错误:

    [INFO] trouble processing "javax/xml/bind/annotation/adapters/CollapsedStringAdapter.class":
    [INFO]
    [INFO] Ill-advised or mistaken usage of a core class (java.* or javax.*)
    [INFO] when not building a core library.
    [INFO]
    ...
    [INFO] If you are legitimately using some code that happens to be in a
    [INFO] core package, then the easiest safe alternative you have is to
    [INFO] repackage that code. That is, move the classes in question into
    [INFO] your own package namespace. This means that they will never be in
    [INFO] conflict with core system classes. JarJar is a tool that may help
    [INFO] you in this endeavor. If you find that you cannot do this, then
    [INFO] that is an indication that the path you are on will ultimately
    [INFO] lead to pain, suffering, grief, and lamentation.

所以

  1. 如何确定我可以在 android 应用程序中使用哪些类?

  2. 如何构建一个通用的域 jar

【问题讨论】:

    标签: java android maven


    【解决方案1】:

    关于OOM: 尝试设置 MAVEN_OPTS="-Xmx512m" 而不是 JAVA_OPTS

    关于核心课程:您获得的信息非常丰富。您包含的 Jar 在核心命名空间中包含一些类,这是不允许的。您可以按照建议使用 jarjar。

    1. 您可以使用此处列出的类:http://developer.android.com/reference/packages.html
    2. 似乎不完整的问题

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 2018-06-19
      • 2017-07-23
      • 2016-11-08
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      相关资源
      最近更新 更多