Использование JSON в проекте Ruboto

У меня есть два разных проекта, написанных на Ruby, использующих Ruboto для упаковки Ruby в.apk, чтобы его можно было перенести на устройство Android. Оба проекта будут скомпилированы и запущены на моем телефоне, а также на эмуляторе телефона, но добавление строки 'require' json '' в обоих проектах, не меняя ничего другого, приводит к сбою при запуске и возвращает меня на домашнюю страницу телефона. Так что это определенно что-то с этой линией. Любые идеи о том, что может вызвать это?

2 ответа

Ruboto предлагает вспомогательный метод для запуска кода с увеличенным размером стека:

require 'ruboto/util/stack'

with_large_stack{require 'json'}

или же

with_large_stack do
  require 'json'
end

Это запустит ваш код в отдельном потоке с большим стеком, позволяющим глубокую рекурсию. Размер стека по умолчанию для метода with_large_stack составляет 64 КБ. Вы можете установить это значение, используя необязательный целочисленный аргумент или опциональный хеш:

with_large_stack(128){require 'json'}

или же

with_large_stack(:size => 128){require 'json'}

Размер стека указывается в килобайтах (КБ).

У меня такая же проблема; ты можешь использовать

adb logcat

чтобы получить больше информации о катастрофе. Если вы посмотрите туда, вы найдете сообщение об ошибке переполнения стека. Вы можете обойти это переполнение стека, требуя только json/pure:

require 'json/pure'

Это по-прежнему не помогает с общей проблемой: большинство вызовов require приводят к переполнению стека. Через Google я обнаружил, что Android не может иметь слишком много вложенных рекурсивных вызовов, всего около 22, до тех пор, пока он не выйдет из строя с переполнением стека. Решение, на которое я указывал, состояло в том, чтобы использовать итерацию, а не рекурсию.:)

Так что сейчас я не знаю реального решения. Большинство больших или полезных драгоценных камней приводят к той же самой проблеме, например, yaml, httpi или nokogiri.

Изменить: есть аналогичный вопрос в списке рассылки Google.

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