Search in sources :

Example 51 with JarEntry

use of java.util.jar.JarEntry in project byte-buddy by raphw.

the class AndroidClassLoadingStrategy method load.

@Override
public Map<TypeDescription, Class<?>> load(ClassLoader classLoader, Map<TypeDescription, byte[]> types) {
    DexProcessor.Conversion conversion = dexProcessor.create();
    for (Map.Entry<TypeDescription, byte[]> entry : types.entrySet()) {
        conversion.register(entry.getKey().getName(), entry.getValue());
    }
    File jar = new File(privateDirectory, randomString.nextString() + JAR_FILE_EXTENSION);
    try {
        if (!jar.createNewFile()) {
            throw new IllegalStateException("Cannot create " + jar);
        }
        JarOutputStream zipOutputStream = new JarOutputStream(new FileOutputStream(jar));
        try {
            zipOutputStream.putNextEntry(new JarEntry(DEX_CLASS_FILE));
            conversion.drainTo(zipOutputStream);
            zipOutputStream.closeEntry();
        } finally {
            zipOutputStream.close();
        }
        return doLoad(classLoader, types.keySet(), jar);
    } catch (IOException exception) {
        throw new IllegalStateException("Cannot write to zip file " + jar, exception);
    } finally {
        if (!jar.delete()) {
            Logger.getLogger("net.bytebuddy").warning("Could not delete " + jar);
        }
    }
}
Also used : TypeDescription(net.bytebuddy.description.type.TypeDescription) JarOutputStream(java.util.jar.JarOutputStream) JarEntry(java.util.jar.JarEntry) HashMap(java.util.HashMap) Map(java.util.Map) DexFile(com.android.dx.dex.file.DexFile) DirectClassFile(com.android.dx.cf.direct.DirectClassFile)

Example 52 with JarEntry

use of java.util.jar.JarEntry in project robovm by robovm.

the class DalvikExecTest method test_execCreatedJarWithManifest.

/**
     * This test does quite the same as test_execCreatedJar, but includes a manifest.
     * Note however that the Dalvik JAR format does not require this manifest.
     * We just test whether the manifest is placed correctly within the JAR by
     * dumping its contents read as a simple text resource.
     * No! We can't do that so easily either, as there are other (parent) JARs
     * with a manifest inside, taken with precedence.
     * So we will reopen the JAR as a JarFile and check the manifest
     *  with a top level end-to-end approach.
     */
public void test_execCreatedJarWithManifest() throws IOException, InterruptedException {
    File jarFile = File.createTempFile("cts_dalvikExecTest_", ".jar");
    jarFile.deleteOnExit();
    // Create the manifest:
    Manifest manifest = new Manifest();
    Attributes attrs = manifest.getMainAttributes();
    attrs.put(Attributes.Name.MANIFEST_VERSION, "3.1415962");
    attrs.put(Attributes.Name.MAIN_CLASS, "dalvikExecTest.HelloWorld");
    attrs.put(Attributes.Name.CLASS_PATH, jarFile.getName());
    // Create a JAR output stream on the temp file using the manifest:
    JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(jarFile), manifest);
    // Define the entry for the classes.dex:
    jarOut.putNextEntry(new JarEntry("classes.dex"));
    // Fill in the classes.dex contents, i.e. the Dalvik executable code:
    // (See below for the detailed source code contents.)
    Streams.copy(Support_Resources.getResourceStream("cts_dalvikExecTest_classes.dex"), jarOut);
    // Now add a resource file:
    //
    jarOut.putNextEntry(new JarEntry("dalvikExecTest/myResource"));
    jarOut.write("This Resource contains some text.".getBytes());
    // Close the stream to the completed JAR file.
    jarOut.close();
    // The resulting JAR file contains the classes listed at the end of this text,
    // like the 'cts_dalvikExecTest.jar' as part of the resources, too.
    String res;
    res = execDalvik(jarFile.getAbsolutePath(), "dalvikExecTest.HelloWorld");
    assertEquals("Hello Android World!", "Hello Android World!\n", res);
    res = execDalvik(jarFile.getAbsolutePath(), "dalvikExecTest.ResourceDumper");
    assertTrue("Android Resource Dumper started", res.contains("Android Resource Dumper started"));
    assertTrue("This Resource contains some text.", res.contains("This Resource contains some text."));
    // And now reread the manifest:
    //
    JarFile jarIn = new JarFile(jarFile);
    manifest = jarIn.getManifest();
    attrs = manifest.getMainAttributes();
    assertEquals("MANIFEST_VERSION must match!", "3.1415962", attrs.get(Attributes.Name.MANIFEST_VERSION));
    assertEquals("MAIN_CLASS must match!", "dalvikExecTest.HelloWorld", attrs.get(Attributes.Name.MAIN_CLASS));
    assertEquals("CLASS_PATH must match!", jarFile.getName(), attrs.get(Attributes.Name.CLASS_PATH));
}
Also used : FileOutputStream(java.io.FileOutputStream) Attributes(java.util.jar.Attributes) JarOutputStream(java.util.jar.JarOutputStream) Manifest(java.util.jar.Manifest) JarEntry(java.util.jar.JarEntry) JarFile(java.util.jar.JarFile) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 53 with JarEntry

use of java.util.jar.JarEntry in project robovm by robovm.

the class DalvikExecTest method test_execCreatedJar.

// Create a temp file, fill it with contents according to Dalvik JAR format, and execute it on dalvikvm using -classpath option.",
public void test_execCreatedJar() throws IOException, InterruptedException {
    File jarFile = File.createTempFile("cts_dalvikExecTest_", ".jar");
    jarFile.deleteOnExit();
    // Create a JAR output stream on the temp file:
    JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(jarFile));
    // Define the entry for the classes.dex:
    jarOut.putNextEntry(new JarEntry("classes.dex"));
    // Fill in the classes.dex contents, i.e. the Dalvik executable code:
    // (See below for the detailed source code contents.)
    Streams.copy(Support_Resources.getResourceStream("cts_dalvikExecTest_classes.dex"), jarOut);
    // Now add a resource file:
    //
    jarOut.putNextEntry(new JarEntry("dalvikExecTest/myResource"));
    jarOut.write("This Resource contains some text.".getBytes());
    // Close the stream to the completed JAR file.
    jarOut.close();
    // The resulting JAR file contains the classes listed at the end of this text,
    // like the 'cts_dalvikExecTest.jar' as part of the resources, too.
    String res;
    res = execDalvik(jarFile.getAbsolutePath(), "dalvikExecTest.HelloWorld");
    assertEquals("Hello Android World!", "Hello Android World!\n", res);
    res = execDalvik(jarFile.getAbsolutePath(), "dalvikExecTest.ResourceDumper");
    assertTrue("Android Resource Dumper started", res.contains("Android Resource Dumper started"));
    assertTrue("This Resource contains some text.", res.contains("This Resource contains some text."));
}
Also used : FileOutputStream(java.io.FileOutputStream) JarOutputStream(java.util.jar.JarOutputStream) JarEntry(java.util.jar.JarEntry) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 54 with JarEntry

use of java.util.jar.JarEntry in project robovm by robovm.

the class OldJarEntryTest method test_ConstructorLjava_util_jar_JarEntry_on_null.

/**
     * @throws IOException
     * java.util.jar.JarEntry#JarEntry(java.util.jar.JarEntry)
     */
public void test_ConstructorLjava_util_jar_JarEntry_on_null() throws IOException {
    JarEntry newJarEntry = new JarEntry(jarFile.getJarEntry(entryName));
    assertNotNull(newJarEntry);
    jarEntry = null;
    try {
        newJarEntry = new JarEntry(jarEntry);
        fail("Should throw NullPointerException");
    } catch (NullPointerException e) {
    // Expected
    }
}
Also used : JarEntry(java.util.jar.JarEntry)

Example 55 with JarEntry

use of java.util.jar.JarEntry in project robovm by robovm.

the class OldJarEntryTest method test_ConstructorLjava_util_zip_ZipEntry.

/**
     * java.util.jar.JarEntry#JarEntry(java.util.zip.ZipEntry)
     */
public void test_ConstructorLjava_util_zip_ZipEntry() {
    assertNotNull("Jar file is null", jarFile);
    zipEntry = jarFile.getEntry(entryName);
    assertNotNull("Zip entry is null", zipEntry);
    jarEntry = new JarEntry(zipEntry);
    assertNotNull("Jar entry is null", jarEntry);
    assertEquals("Wrong entry constructed--wrong name", entryName, jarEntry.getName());
    assertEquals("Wrong entry constructed--wrong size", 311, jarEntry.getSize());
}
Also used : JarEntry(java.util.jar.JarEntry)

Aggregations

JarEntry (java.util.jar.JarEntry)594 JarFile (java.util.jar.JarFile)290 File (java.io.File)217 IOException (java.io.IOException)187 InputStream (java.io.InputStream)134 JarOutputStream (java.util.jar.JarOutputStream)112 FileOutputStream (java.io.FileOutputStream)109 FileInputStream (java.io.FileInputStream)92 URL (java.net.URL)87 JarInputStream (java.util.jar.JarInputStream)87 ArrayList (java.util.ArrayList)67 Manifest (java.util.jar.Manifest)58 JarURLConnection (java.net.JarURLConnection)53 Test (org.junit.Test)39 HashSet (java.util.HashSet)31 ZipEntry (java.util.zip.ZipEntry)31 ZipFile (java.util.zip.ZipFile)30 OutputStream (java.io.OutputStream)29 BufferedInputStream (java.io.BufferedInputStream)26 Enumeration (java.util.Enumeration)26