Как запустить Dacapo Benchmark в среде выполнения Android?

По какой-то причине я хотел бы запустить Dacapo Benchmark в среде выполнения Android (ART) с помощью adb. Вот шаги для запуска:

      # convert all .class bytecode in dacapo.jar to .dex bytecode
java -jar dx.jar --dex --output=classes.dex $(find . -name "*.class") 

adb push classes.dex /sdcard/dacapo

# run the 'fop' benchmark
adb shell app_process -Djava.class.path=/sdcard/dacapo/classes.dex /sdcard/dacapo Harness fop 

Однако я получаю информацию об исключении:

      java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.net.URL.getProtocol()' on a null object reference
        at org.dacapo.harness.CommandLineArgs.extractBenchmarkSet(Unknown Source:52)
        at org.dacapo.harness.CommandLineArgs.<init>(Unknown Source:600)
        at org.dacapo.harness.TestHarness.main(Unknown Source:64)
        at java.lang.reflect.Method.invoke(Native Method)
        at Harness.main(Unknown Source:91)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)

Я проверяю исходный код Dacapo и нахожу источник исключения:

      public class CommandLineArgs{
    static List<String> extractBenchmarkSet() throws IOException {
        List<String> benchmarks = new ArrayList<String>();
        URL url = CommandLineArgs.class.getClassLoader().getResource("cnf");
        String protocol = url.getProtocol();
        ...
    }

}

Как вы видете, getResource("cnf") вернуть nullСправка. Причина в том, что в dacapo.jar есть какой-то ресурс, но dx.jar может конвертировать только .class в .dex без каких-либо файлов ресурсов.

Я также попытался разместить ресурс в /sdcard/ а также /sdcard/dacapo но все равно не получается.

Итак, как сделать так, чтобы байт-код .dex получил доступ к cnf ресурс?

0 ответов

Другие вопросы по тегам