Wednesday 15 July 2015

android - Exclude JAR from DEX -



android - Exclude JAR from DEX -

i want load classes apk running service @ runtime, next error:

11-03 16:51:13.570 20227-20240/com.somecompany.android.core w/dalvikvm﹕ class resolved unexpected dex: lcom/somecompany/android/core/db/databasemanager;(0x2ce11280):0x392d6000 ref [lcom/somecompany/android/core/coremodule;] lcom/somecompany/android/core/coremodule;(0x2cdb1d20):0x38f40000 11-03 16:51:13.570 20227-20240/com.somecompany.android.core w/dalvikvm﹕ (lcom/somecompany/android/core/db/databasemanager; had used different lcom/somecompany/android/core/coremodule; during pre-verification) 11-03 16:51:13.570 20227-20240/com.somecompany.android.core w/dalvikvm﹕ unable resolve superclass of lcom/somecompany/android/core/db/databasemanager; (720) 11-03 16:51:13.570 20227-20240/com.somecompany.android.core w/dalvikvm﹕ link of class 'lcom/somecompany/android/core/db/databasemanager;' failed 11-03 16:51:13.570 20227-20240/com.somecompany.android.core w/dalvikvm﹕ threadid=11: thread exiting uncaught exception (group=0x2c7dbfc0) 11-03 16:51:13.570 20227-20240/com.somecompany.android.core e/com.somecompany.android.core.coreapplication﹕ thread com.somecompany.android.core.coreservice-80000000 has crashed 11-03 16:51:13.570 20227-20240/com.somecompany.android.core e/com.somecompany.android.core.coreapplication﹕ java.lang.illegalaccesserror: class ref in pre-verified class resolved unexpected implementation @ dalvik.system.dexfile.defineclass(native method) @ dalvik.system.dexfile.loadclassbinaryname(dexfile.java:211) @ dalvik.system.dexpathlist.findclass(dexpathlist.java:315) @ dalvik.system.basedexclassloader.findclass(basedexclassloader.java:58) @ java.lang.classloader.loadclass(classloader.java:501) @ java.lang.classloader.loadclass(classloader.java:461) @ com.somecompany.android.core.coremoduleloader.loadregistermodules(coremoduleloader.java:56) @ com.somecompany.android.core.coremoduleloader.load(coremoduldeloader.java:110) @ com.somecompany.android.core.coreservice$1.run(coreservice.java:148) @ java.lang.thread.run(thread.java:856)

i think problem apk generated android automatic build packs service classes apk, @ time of loading causes problems because these same classes exist service. service linked jar @ compile time.

how can modify build process service jar not included in resulting apk? in advance.

edit: classes.dex within apk have service classes.

edit: build.xml node used dex jars. unfortunately have no thought ant on how configure part, help appreciated.

<!-- configurable macro, allows pass parameters output directory, output dex filename , external libraries dex (optional) --> <macrodef name="dex-helper"> <element name="external-libs" optional="yes" /> <attribute name="nolocals" default="false" /> <sequential> <!-- sets primary input dex. if pre-dex task sets else has no effect --> <property name="out.dex.input.absolute.dir" value="${out.classes.absolute.dir}" /> <!-- set secondary dx input: project (and library) jar files if pre-dex task sets else has no effect --> <if> <condition> <isreference refid="out.dex.jar.input.ref" /> </condition> <else> <path id="out.dex.jar.input.ref"> <path refid="project.all.jars.path" /> </path> </else> </if> <dex executable="${dx}" output="${intermediate.dex.file}" dexedlibs="${out.dexed.absolute.dir}" nolocals="@{nolocals}" forcejumbo="${dex.force.jumbo}" disabledexmerger="${dex.disable.merger}" verbose="${verbose}"> <path path="${out.dex.input.absolute.dir}"/> <path refid="out.dex.jar.input.ref" /> <external-libs /> </dex> </sequential> </macrodef>

as explained here, created compile-libs/ folder , moved service jar there (removing libs/). created custom_build.xml , included jar compilation (not dexing).

<?xml version="1.0" encoding="utf-8"?> <project name="custom_rules"> <path id="java.compiler.classpath.path"> <fileset dir="compile-libs" includes="*.jar" /> </path> <property name="java.compiler.classpath" refid="java.compiler.classpath.path" /> </project>

this looks have solved problem generated dex not have classes service jar.

edit: farther testing confirms working expected.

android apk dex

No comments:

Post a Comment