Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > замена ресурсов в jar для j2me


Автор: math64 7.12.2010, 13:06
Хочу заменить ресурсы jar, чтобы не требовалось устанавливать j2me.
Пишется для j2me, но на j2se, потому здесь,
пока пробую переписать jar без замены:
Код

    JarFile jar = new JarFile("in/test.jar");
    Enumeration entries = jar.entries();
    JarOutputStream out = new JarOutputStream(new FileOutputStream("out/test.jar"));
    byte[] b = new byte[10000];
    while (entries.hasMoreElements()) {
      JarEntry jarEntry = (JarEntry) entries.nextElement();
      String name = jarEntry.getName();
      jarEntry = new JarEntry(jarEntry);
      out.putNextEntry(jarEntry);
      if (!jarEntry.isDirectory()) {
        InputStream in = jar.getInputStream(jarEntry);
        for(int len; (len = in.read(b, 0, b.length)) > 0;) {
          out.write(b, 0, len);
        }
      }
      out.closeEntry();
    }
    jar.close();
    out.close();
    PrintStream jad = new PrintStream("out/test.jad");
    jad.println("MIDlet-1: test, test.png, Midlet1");
    jad.println("MIDlet-Icon: /test.png");
    jad.println("MIDlet-Jar-Size: " + new File("out/test.jar").length());
    jad.println("MIDlet-Jar-URL: test.jar");
    jad.println("MIDlet-Name: test");
    jad.println("MIDlet-Vendor: math64");
    jad.println("MIDlet-Version: 1.0");
    jad.println("MicroEdition-Configuration: CLDC-1.0");
    jad.println("MicroEdition-Profile: MIDP-2.0");
    jad.close();

Мидлет запускается, но ресурсов не видит.
Новый jar того же размера, но некоторые быйты отличаются, в основном 0A заменено на 14

Автор: oxigen 7.12.2010, 18:31
глупый вопрос, но:
А вручную не пробовали в джаре файлы поменять?

Автор: math64 8.12.2010, 08:56
Если раскрыть архив WinRAR и собрать заново (и поправить размер в jad), файл получается меньше, но ресурсы всё равно не видит, хотя файлы .class загружаются (System.out.println() выводится в эмуляторе)
То же самое, если запаковать jar c помощью jar:
Код

jar cfm test.jar META-INF/MANIFEST.MF .

Только результирующий jar получается больше оригинального

Автор: math64 8.12.2010, 16:33
Ошибка была в том, что при создании ресурса (в j2se) было out.writeInt(count); , а при чтении (в j2me) count = in.readShort(); поэтому ресурс открывался, но считывался 0.
Теперь созданный с заменёнными ресурсами jar читается, хотя и получается немного длиннее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)