简体   繁体   中英

Cannot include 3rd-party jars into Android application with the maven-android-plugin

I am trying to use the samples provided, but when I add another jar that I already created with POJO's, I am not able to compile the application anymore

            <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>

When I use my jar I created, I get this OOM error

    [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]

I even tried upping the memory

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

But still ran out for some reason.

Now, when I try to use another jar from someone else, say Crest which states it works out-of-the-box with android:

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

I then try to build and get this error:

    [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.

So

  1. how do I determine what classes I am able to use with an android application?

  2. How do I structure a common domain jar that

Regarding OOM: try setting MAVEN_OPTS="-Xmx512m" instead of JAVA_OPTS

Regarding core class: info you got is pretty informative. Jar you have included contains some classes in core namespace, that is not allowed. You can use jarjar as suggested.

  1. you can use classes that are listed here: http://developer.android.com/reference/packages.html
  2. seems incomplete question

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM