package com.android.dx.merge;
import com.android.dx.io.DexBuffer;
-import dalvik.system.PathClassLoader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
assertTrue(maxLength + " < " + maxExpectedLength, maxLength < maxExpectedLength);
}
- public ClassLoader mergeAndLoad(String dexAResource, String dexBResource) throws IOException {
+ public ClassLoader mergeAndLoad(String dexAResource, String dexBResource) throws Exception {
DexBuffer dexA = resourceToDexBuffer(dexAResource);
DexBuffer dexB = resourceToDexBuffer(dexBResource);
DexBuffer merged = new DexMerger(dexA, dexB, CollisionPolicy.KEEP_FIRST).merge();
File mergedDex = File.createTempFile("DexMergeTest", ".classes.dex");
merged.writeTo(mergedDex);
File mergedJar = dexToJar(mergedDex);
- return new PathClassLoader(mergedJar.getPath(), getClass().getClassLoader());
+ // simplify the javac classpath by not depending directly on 'dalvik.system' classes
+ return (ClassLoader) Class.forName("dalvik.system.PathClassLoader")
+ .getConstructor(String.class, ClassLoader.class)
+ .newInstance(mergedJar.getPath(), getClass().getClassLoader());
}
private DexBuffer resourceToDexBuffer(String resource) throws IOException {
# Find dx.jar from dx in the android dev tree
prog=`which dx`
progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
-javac testdata/*.java
+javac -cp $dxjar `find . -name "*.java"`
+dx --dex --output=test.jar com/android/dx/merge/* $dxjar
+
+# Build a resource .jar containing the .dex files to merge
dx --dex --output=testdata/Annotated.dex testdata/Annotated*
dx --dex --output=testdata/Basic.dex testdata/Basic*
dx --dex --output=testdata/FillArrayData.dex testdata/FillArrayData*
dx --dex --output=testdata/TryCatchFinally.dex testdata/TryCatchFinally*
jar cfM resources.jar testdata/*.dex
-vogar --classpath resources.jar \
- --classpath $progdir/../framework/dx.jar \
- com/android/dx/merge/DexMergeTest.java > unit-out.txt
+dalvik -classpath test.jar:resources.jar \
+ junit.textui.TestRunner com.android.dx.merge.DexMergeTest > unit-out.txt
if [ "$?" = "0" ]; then
echo "Yay!"
# Find dx.jar from dx in the android dev tree
prog=`which dx`
progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
-vogar --classpath $progdir/../framework/dx.jar \
- com/android/dx/util/Leb128UtilsTest.java > unit-out.txt
+javac -cp $dxjar `find . -name "*.java"`
+java -classpath $dxjar:. junit.textui.TestRunner com.android.dx.util.Leb128UtilsTest > unit-out.txt
if [ "$?" = "0" ]; then
echo "Yay!"
# Find dx.jar from dx in the android dev tree
prog=`which dx`
progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
-vogar --classpath $progdir/../framework/dx.jar \
- com/android/dx/util/Mutf8Test.java > unit-out.txt
+javac -cp $dxjar `find . -name "*.java"`
+java -classpath $dxjar:. junit.textui.TestRunner com.android.dx.util.Mutf8Test > unit-out.txt
if [ "$?" = "0" ]; then
echo "Yay!"
# Find dx.jar from dx in the android dev tree
prog=`which dx`
progdir=`dirname "${prog}"`
+dxjar=$progdir/../framework/dx.jar
-# Find dx.jar from dx in the android dev tree
-prog=`which dx`
-progdir=`dirname "${prog}"`
+javac -cp $dxjar `find . -name "*.java"`
+dx --dex --output=test.jar com/android/dx/merge/* $dxjar
-javac testdata/*.java
+# Build a resource .jar containing the .dex files to merge
dx --dex --output=testdata/A.dex testdata/A.class
dx --dex --output=testdata/B.dex testdata/B.class
jar cfM resources.jar testdata/*.dex
-vogar --classpath resources.jar \
- --classpath $progdir/../framework/dx.jar \
- com/android/dx/merge/MergeConflictTest.java > unit-out.txt
+dalvik -classpath test.jar:resources.jar \
+ junit.textui.TestRunner com.android.dx.merge.MergeConflictTest > unit-out.txt
if [ "$?" = "0" ]; then
echo "Yay!"