компилирование Jars и добавление их в проект Android - PullRequest
3 голосов
/ 27 мая 2011

Хорошо, вот в чем дело, я потратил несколько дней, обыскивая всю базу данных, так что либо я не нашел нужные слова, либо ответа на него нет, надеюсь, «пока».

Симптомы: -компиляция проекта Android DX компилирует все фляги каждый раз при сборке проекта - нет причин делать это один раз, должно быть достаточно, как бы он ни делал это каждый раз, каждая сборка может занять много времени вместо того, чтобы занимать секунды минут.

Реальная проблема:

-Добавление нескольких банок вызывает затмение к краху - теперь это с этими настройками (тяжелые банки) -Xms256m -Xmx1024m -XX: + UseParallelGC -XX: PermSize = 256M -XX: MaxPermSize = 512M

(что на самом деле дает лучшую производительность, поэтому, если ваша затмение будет медленно компилироваться, вы можете добавить -XX: + UseParallelGC, это поможет) (я не мог установить его выше, чем это, размер кучи Java достигнет 750 м при падении затмения, gc не работает, когда DX компилирует jar, он пытается между ними, но процессор занят, что не позволяет, поэтому в момент, когда он достигает четвертой пятой банки, каждая из которых составляет 3 МБ, он имеет что-то вроде 600 МБ в куче Вот почему я использовал gcoverheadlimit)

Компиляция каждого из них или нескольких из них хорошо скомпилирует (в рамках одного и того же проекта Android), проблема в том, что я не могу найти способ скомпилировать их по отдельности (тогда мне понадобятся apks, установленные на клиентском устройстве), и когда я собираю их вместе, Eclipse вылетает.

Я пытался скомпилировать их один за другим, используя cmd и DX, хотя он собран, когда я собираю проект в eclispe, он перестраивает его, так что, как будто я ничего не делал, пытался преобразовать банки в файлы DEX, не так ли не поможет.

Я написал много постов, касающихся размера кучи Java, это не мой случай, я даже использовал gcoverheadlimit, слишком много банок приводят к его падению, если у кого-то есть идея / решение, я приветствую его / ее ...

Подводя итог всему этому: Я хочу преобразовать обычные java-jar-файлы в формат Dalvik, а затем добавить их в качестве ресурса для проекта Android, поэтому, когда проект будет выполнен, ему не нужно будет преобразовывать jar-файлы в формат Dalvik, потому что это уже сделано.

Ответы [ 3 ]

2 голосов
/ 29 мая 2011

Хорошо, после долгих исследований, я думаю, что знаю, в чем проблема, однако пока не знаю, как ее обойти.

Симптомы: составление большой или нескольких банок, приводящих к затмениюсбой, когда не происходит сбой сообщение об ошибке: ошибка записи вывода: opcode == null, преобразование в формат Dalvik завершилось ошибкой 2.

Причина: DX не может обработать больше, чем может содержать в16-битная строка, таким образом, нет способа включить (по крайней мере, в то же время) больше, чем длина этой строки.

Результат: невозможно запрограммировать сложные приложения для Android как один APK.

Совет для разработчиков Android (я не совсем уверен, как вы его построили, но): вы можете использовать arraylist для этих строк, каждый из которых записывает себя в свою очередь в файл classes.dex, тогда будетнет ограничений на написание кода для одного APK и / или добавление столько jar-файлов, сколько нужно разработчику, это предположение, делающее это не простым, но и не слишком сложным, определенноне для тех, кто сделал Android, согласен?

Обходной путь: извините, но у меня еще нет обходного пути, мне потребовалось некоторое время, чтобы понять эту проблему, потому что затмение вылетело, и я не получил"opcode == null", сообщение об ошибке, поэтому я подумал, что это проблема затмения, я буду рад получить второе и третье мнение по этому вопросу.

0 голосов
/ 11 октября 2012

У меня была такая же проблема.В подробном выводе было много сообщений «Dx processing ...», и на сборку Class.dex (3,4 Мб) ушло около 3-4 минут.Это было очень медленно , и я почувствовал себя как попка.Затем я провел исследование и выяснил, что причина проблемы в неправильных настройках JVM затмения (eclipse.ini).Кстати, я получил этот неприятный конфиг из некоторого ответа stackoverflow с более чем 100 ответами.

Пожалуйста, убедитесь, что eclipse.ini не содержит следующую строку:


    CompileThreshold=5

Я удалил эту строкуи теперь компиляция занимает ~ 10 сек !!!Кроме того, теперь я использую ParallelGC вместо G1GC в конфигурации eclipse, потому что он более стабилен и не приводит к сбою в моей IDE.

Итак, ваша основная задача - пересмотреть eclipse.ini и избавиться от всех подозрительных иэкспериментальные параметры.

0 голосов
/ 27 мая 2011

После создания JAR добавьте их в качестве внешних JAR ...

В Eclipse выберите меню «Проект» -> «Свойства», затем «Путь сборки Java». Выберите вкладку «Библиотеки», затем нажмите кнопку «Добавить внешние JAR-файлы ...», затем просмотрите и добавьте их.

...