На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> GCC на андроид, и ГО кодить на плюсах! возможно?
    всем привет.
    погуглил я по сабжу, и нагуглил NDK.
    сходу ничего не понял. ни какой версии компилер, ни на сколько урезан и чем урезан.
    кто в теме, поделитесь опытом. а лучше, статью накатайте.

    и еще, нагуглил necessitas.
    но вот чего не понял:
    1. это полная версия Qt? или тоже порезанная?
    2. неужели нельзя собирать проги прям на андроиде? компилятор ведь там есть.


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

      А статью катать не надо, всё написано давно.

      По сабжу - всё просто:
      1)Объявляем в классе native метод
      2)Натравливаем на него javah которій сгенерит интерфейс, особо просветлённые могут это сделать и ручками
      3)Имплементим, компилим (для винды надо ставить cygwin)
      4)В теле класса с нейтив методом делаем статик блок в котором пишем: LoadLibrary("Name"). Обращаю внимание, что .SO писать ненадо
      5)Всё.

      Теперь немного философии. Если вы думаете, что ваш код будет пахать быстрее чем на джаве, то скорее всего вы ошибаетесь :) В нейтив код надо выносить то, что супер критично по производительности (и джава код не может помочь) либо же всякие мегасистемные приколы для рута или кастомной прошивки.

      По поводу necessitas - не читал, но порицаю. Наф не надо, лучше даже не браться.
        Цитата Guy Fawkes @
        Если вы думаете, что ваш код будет пахать быстрее чем на джаве, то скорее всего вы ошибаетесь
        Цитата Guy Fawkes @
        В нейтив код надо выносить то, что супер критично по производительности (и джава код не может помочь)
        Только я вижу тут взаимоисключающие параграфы?
          Цитата Adil @
          Только я вижу тут взаимоисключающие параграфы?

          угу :)
          но я спрашиваю не из-за этого. просто влом java API/framework учить.
          Цитата Guy Fawkes @
          По поводу necessitas - не читал, но порицаю. Наф не надо, лучше даже не браться.

          поясните пожалуйста, что с necessitas не так?
            Цитата Adil @
            Только я вижу тут взаимоисключающие параграфы?

            Adil, перепишу специально для тебя:
            1) Писать тупо всё что только можно на плюсах - зло и незнание джавы. К примеру глупо выносить сортировку массива в нейтив.
            2) Джава код не может помочь, к примеру, при обращении к экрану. Вот захочешь ты сделать скриншот экрана - а джава тебе не даст. Вот для этого и надо писать нейтив код. Во всех других случаях алгоритм такой:
            2.1) Пишем всё на джаве
            2.2) Только если не устраивает производительность начинаем оптимизацию
            2.3) Запускаем профайлер и смотрим что тормозит
            2.4) Находим говнокод на джаве, переписываем его, переходим на 2.2, если переписать не можем - то велкам далее
            2.5) Пишем native код, анализируем скорость и возможно возвращаемся на 2.1
              Цитата Guy Fawkes @
              глупо выносить сортировку массива в нейтив.

              правда? Оо
              а ничто, что я всю жизнь на плюсах пишу? а там сортировка происходит именно в нэйтив коде)
                Цитата niXman @
                но я спрашиваю не из-за этого. просто влом java API/framework учить.

                Ну так не учи, кто же заставляет то? Другое дело, как ты без фреймворка будешь работать с сервисами от андроида. Я понимаю, что можно сделать нейтив вызов и из плюсов, но всеравно матчасть знать надо. А если матчасть знаешь, то можно и на джаве писать.
                Цитата niXman @
                поясните пожалуйста, что с necessitas не так?

                Для гуёв у Андроида есть свои средства. Они родные, покрывают работу со всеми экранами и т.д. Вообще я где-то уже писал как надо разрабатывать софт если надо кросплатформенность, можно поискать. Или тут или в мобильных устройствах.

                Добавлено
                Цитата niXman @
                правда? Оо
                а ничто, что я всю жизнь на плюсах пишу? а там сортировка происходит именно в нэйтив коде)

                Ну и ладушки. Привыкай :) Джава отсортирует твой массив не хуже, а по скорости, учитывая затраты на нейтив вызовы, еще и быстрее.
                Более того с нейтив кодом есть парочку приколов:
                1) Дебажить его не так просто ;) Точне просто ад.
                2) Если не дай Бог вы выделили память в нейтив коде, то сами понимаете.
                  мельком глянул компилятор, что поставляется в NDK. сходу, не заметил чтоб там не хватало каких-то STL-хидеров. версия точно не понята, но что-то вроде 4.4.х

                  Добавлено
                  Цитата Guy Fawkes @
                  Если не дай Бог вы выделили память в нейтив коде, то сами понимаете.

                  что? освобождать придется? или в чем подвох?
                    Цитата niXman @
                    версия точно не понята, но что-то вроде 4.4.х

                    В пятом была 4.4.3, сейчас 6b что там внутри не знаю.
                    Цитата niXman @
                    что? освобождать придется? или в чем подвох?

                    Да, освобождать придётся.
                      Цитата Guy Fawkes @
                      Да, освобождать придётся.

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

                        Добавлено
                        Цитата niXman @
                        ну так это привычное дело. да и смарты именно для этого и придумали. и шаблоны, и много чего еще вкусненького из плюсов.

                        Ага, отлично. Главный вопрос: нафига? Джава делает всё то же без дополнительного оверхеда.
                          Цитата Guy Fawkes @
                          нафига?

                          потому что с++ для меня как родной язык. а тут еще и жава учить придется %)

                          ладно, а то скатываемся в троллинг.


                          еще вопрос: какие мысли по поводу Xamarin и MonoTouch?
                            Цитата niXman @
                            потому что с++ для меня как родной язык. а тут еще и жава учить придется %)

                            Ну если у тебя заболит горло и у тебя есть друг проктолог, ты же к нему не пойдёшь на приём? Оно конечно можно ... :lol:
                            Цитата niXman @
                            еще вопрос: какие мысли по поводу Xamarin и MonoTouch?

                            Мысли такие:
                            1) Если надо суперкросплатформ (винда + мак + айфон + андроид + веб) - юзаем Unity
                            2) Если надо айфон + андроид - нейтив либа для логики (если надо) + гуи отдельно
                            3) Во всех остальных случаях только каноніческаЪ православнаЪ джава.
                              Цитата Guy Fawkes @
                              юзаем Unity

                              а это что? темный я в этом направлении, понимаю)

                              Добавлено
                              почитал несколько статей на хабре про запрет mono/monotouch, и расстроился... кто, что думает по этому поводу? есть ли вероятность что Apple отменит свой запрет?

                              Добавлено
                              еще, с necessitas не до конца понял, почему плохо?
                                Цитата niXman @
                                а это что? темный я в этом направлении, понимаю)

                                Unity 3D
                                Цитата niXman @
                                почитал несколько статей на хабре про запрет mono/monotouch, и расстроился... кто, что думает по этому поводу? есть ли вероятность что Apple отменит свой запрет?

                                Так это, если не секрет, что писать собираешся? Я уверен на 99.(9)% что моно тебе и нафиг не надо.

                                Добавлено
                                Цитата niXman @
                                еще, с necessitas не до конца понял, почему плохо?

                                Потому что там нет поддержки всего что надо для того чтобы сделать нормальный layout.
                                  т.е. получается так, что для входа на рынок разработки для мобайл девайсов, нужно знать кучу ЯП. ладно ЯП... но это же еще и кучу фреймверков для каждого ЯП выучить надо! а это уже не смешно.

                                  за сегодня, я понял, что следующие ЯП используются для разработки:
                                  1. java - android
                                  2. C#/.NET - android/iPhone/iPad
                                  3. Objective-C/C++ - iPhone/iPad
                                  4. c++ - хз

                                  Добавлено
                                  Цитата Guy Fawkes @
                                  Unity 3D

                                  это Flash?
                                    Пункт 2 конечно можно выкинуть, он лишний. Но
                                    Цитата niXman @
                                    но это же еще и кучу фреймверков для каждого ЯП выучить надо!

                                    никто не отменяет. Фреймворк знать надо, что логично.
                                      Цитата Guy Fawkes @
                                      Так это, если не секрет, что писать собираешся?

                                      да ничего конкретного. просто "смотрю в будущее".

                                      Добавлено
                                      Цитата Guy Fawkes @
                                      Фреймворк знать надо, что логично.

                                      согласен. а что со вторым пунктом не так?
                                        Цитата niXman @
                                        это Flash?

                                        Нет, это не флеш.

                                        Добавлено
                                        Цитата niXman @
                                        согласен. а что со вторым пунктом не так?

                                        Потому что можно писать под яблоки на обджектив си, а под андроид на джаве. Шарп в этом случае - нафиг надо.
                                          Цитата Guy Fawkes @
                                          Нет, это не флеш.

                                          хорошо, это не Flash. я так понял, это некий фреймверк. какой ЯП используется?
                                          Цитата Guy Fawkes @
                                          Потому что можно писать под яблоки на обджектив си, а под андроид на джаве. Шарп в этом случае - нафиг надо.

                                          понял.
                                            Цитата niXman @
                                            хорошо, это не Flash. я так понял, это некий фреймверк. какой ЯП используется?

                                            Шарп + он интегрируется с фотошопом и 3дмаксом.
                                              Guy Fawkes, вроде вопросы на данный момент исчерпаны.
                                              спасибо Вам огромное :yes:
                                                Мой опыт. Проект - мессенджер.
                                                1. Бизнес-логика вся вынесена в С++.
                                                2. На Java только GUI.
                                                3. Никаких значительных проблем с STL нет, работаем с boost (asio, filesystem, signals, signals2, system, thread, wave, regex, random, graph, короче, никаких проблем). Для сборки и использования буста понадобились незначительные изменения в библиотеках.
                                                4. Так же собрали OpenSSL и SQLite. Но они есть в SDK, в принципе, правда, без хидеров.

                                                Так сделано для того, чтобы потом было проще перейти на iPhone и другие мобильные оси. NDK уровень сейчас есть везде, даже в blackberry, так что это должно покрывать большую часть нужд.

                                                Вообще, граблей много и граблей не всегда очевидных. Так что, если надумаешь этот вопро поднять, пиши, будем разгребать :)
                                                  Hsilgos, я тебя правильно понял, написанное выше относится к андроиду?
                                                  а вообще, методика писать реализацию/логику в .dll/.so используется довольно часто. и, наверное, не зря.
                                                    Цитата niXman @
                                                    а вообще, методика писать реализацию/логику в .dll/.so используется довольно часто. и, наверное, не зря.

                                                    Ага, конечно. Такая логика катит если ты не используешь фичей андроида. Если ты их используешь - то .so использовать мягко говоря - глупо.
                                                      Цитата Hsilgos @
                                                      Так сделано для того, чтобы потом было проще перейти на iPhone и другие мобильные оси.

                                                      вариант!

                                                      Добавлено
                                                      Цитата Guy Fawkes @
                                                      если ты не используешь фичей андроида

                                                      о каких таких "фитчах" идет речь? к примеру.
                                                        Цитата niXman @
                                                        о каких таких "фитчах" идет речь? к примеру.

                                                        К примеру- поднять вай-фай. Этот код явно не катит в кросс платформ либу и писать его в so глупо.
                                                        Опять же, как сделать Broadcast Receiver в либе? Как послать интент? Как написать синк адаптер? Как добавить account?
                                                          Цитата Guy Fawkes @
                                                          поднять вай-фай

                                                          так это же к андроиду не имеет никакого отношения. это забота системы. а система на андроиде - Linux. и писать этого не нужно. все уже написано. только подкорректировать/собрать.
                                                          Цитата Guy Fawkes @
                                                          Broadcast Receiver

                                                          это тоже системное.
                                                          Цитата Guy Fawkes @
                                                          Как послать интент?

                                                          а это что такое?
                                                          Цитата Guy Fawkes @
                                                          Как добавить account?

                                                          в смысле, юзера?
                                                            Цитата
                                                            Hsilgos, я тебя правильно понял, написанное выше относится к андроиду?

                                                            Да
                                                            Цитата
                                                            Такая логика катит если ты не используешь фичей андроида. Если ты их используешь - то .so использовать мягко говоря - глупо.

                                                            "Фичи" платформы у нас идут на родном для платформы языке.
                                                            В .so только логика и общие для всеx платформ вещи: работа с сетью (boost::asio), работа с файловой системой (boost::filesystem), потоки и синхронизация (boost::thread).
                                                            К слову, такая архитектура выбрана не с бухты-барахты. Мы провели кое-какие исследования (заодно проверили, как буст собирается под андроид, iPhone, symbian и WinMobile), проконсультировались с конторами, которые уже занимаются похожими разработками, рассмотрели разные варианты (1 - писать под каждую платформу на родном для неё языке, 2 - использовать какие-нибудь фреймворки, которые позволяют писать под несколько платформ, 3 - вынести общую логику в С++) и остановились на последнем варианте.
                                                              Цитата Hsilgos @
                                                              (заодно проверили, как буст собирается под андроид, iPhone, symbian и WinMobile)

                                                              и на всех все хорошо с бустом?
                                                                Цитата niXman @
                                                                так это же к андроиду не имеет никакого отношения. это забота системы. а система на андроиде - Linux. и писать этого не нужно. все уже написано. только подкорректировать/собрать.

                                                                Ага, ну ну, удачи. Система даёт тебе интерфейсы как поднять вайфай. Интерфейс один - WiFiManager. Кроме того, надо в манифесте указать права. Да, вся работа занимает ровно 3 строки. И ничего не надо подкорректировать.
                                                                Цитата niXman @
                                                                это тоже системное.

                                                                :wacko:
                                                                Цитата niXman @
                                                                а это что такое?

                                                                учи матчасть
                                                                Цитата niXman @
                                                                в смысле, юзера?

                                                                setings -> accounts.

                                                                Добавлено
                                                                Цитата Hsilgos @
                                                                В .so только логика и общие для всеx платформ вещи

                                                                Так и я же об этом. Но если писать под 1 платформу, то городить такой огород не стоит.
                                                                  Цитата Hsilgos @
                                                                  такая архитектура выбрана не с бухты-барахты

                                                                  мне знакома некоторая контора разрабатывающая кроссплатформенный софт. так вот. они перешли на пайтон. а весь имеющийся код логики(С/С++) вынесли в .dll/.so, и из пайтона его дергают. по их впечатлениям - лучшего и желать нельзя.

                                                                  Добавлено
                                                                  давайте только в холивар не превращать тему.

                                                                  Добавлено
                                                                  Цитата Guy Fawkes @
                                                                  Но если писать под 1 платформу, то городить такой огород не стоит.

                                                                  а зачем такое делать? это как писать на WinAPI.
                                                                    Цитата niXman @
                                                                    давайте только в холивар не превращать тему.

                                                                    niXman, так тут как бы холиварить нечего. Есть бест практис. Нужен кроссплатфор - всю общую логику в so, иначе пишешь Java/Objectice-C и всё.

                                                                    Добавлено
                                                                    Цитата niXman @
                                                                    а зачем такое делать? это как писать на WinAPI.

                                                                    Немного не понял. Я о том, что юзать нейтив вызовы просто из-за того что влом писать правильный джава код не есть хорошо.
                                                                      Цитата Guy Fawkes @
                                                                      иначе пишешь Java/Objectice-C и всё

                                                                      а зачем писать такой код, когда можно писать сразу а расчете на несколько платформ?
                                                                      Сообщение отредактировано: niXman -
                                                                        Цитата niXman @
                                                                        а зачем писать такой код, когда можно писать сразу а расчете на несколько платформ?

                                                                        Потому что гуй и платформ специфик код ты никогда не запихнёшь в .so К примеру у меня сейчас есть 2 апликухи в разработке - под андроид и айфон. Похожая часть - только SQLite, но в so её не выносили, смысла нет.
                                                                          Цитата
                                                                          а зачем писать такой код, когда можно писать сразу а расчете на несколько платформ?

                                                                          Да ладно, это уже от ТЗ зависит
                                                                            Цитата Guy Fawkes @
                                                                            Потому что гуй и платформ специфик код ты никогда не запихнёшь в .so

                                                                            про гуй согласен. но что за специфик код может быть, который на столько отличается? linux и bsd не сильно отличаются в плане API.
                                                                              Цитата niXman @
                                                                              но что за специфик код может быть, который на столько отличается?

                                                                              Вся работа с фреймворком андроида, как я уже и писал. Обойти её - нельзя, так как апликуха твоя в песочнице и вызвать что-то эдакое у системы можно ТОЛЬКО через правильный интерфейс и ТОЛЬКО при наличии прав. Других путей нет. Иначе школота такое понаписывает, что система развалится на куски.
                                                                                Цитата Guy Fawkes @
                                                                                Вся работа с фреймворком андроида

                                                                                эти фреймверки - всего лишь прослойки над API системы(т.е. libc).
                                                                                Цитата Guy Fawkes @
                                                                                так как апликуха твоя в песочнице

                                                                                да нет. в песочнице только жава приложения. нативные же, работают нативно.
                                                                                Цитата Guy Fawkes @
                                                                                вызвать что-то эдакое у системы можно ТОЛЬКО через правильный интерфейс

                                                                                правильный интерфейс - это linux-kernel + libc.
                                                                                  Цитата niXman @
                                                                                  в песочнице только жава приложения. нативные же, работают нативно.

                                                                                  Тоесть типа если я попробую в сях поднять вайфай то мне пермишен в манифесте не нужен? ;)
                                                                                  Цитата niXman @
                                                                                  правильный интерфейс - это linux-kernel + libc.

                                                                                  Камрад, я не хочу покахазаться наглым, но я работаю с андроидом на разных уровнях (от фреймворка до апликух) уже три года, причём работаю в компаниях входящих в топ 3 поставщиков смартфонов на андроиде. Поверь мне, так как ты описываешь они не делают.
                                                                                    Цитата Guy Fawkes @
                                                                                    Тоесть типа если я попробую в сях поднять вайфай то мне пермишен в манифесте не нужен?

                                                                                    именно.

                                                                                    Добавлено
                                                                                    Цитата Guy Fawkes @
                                                                                    Камрад, я не хочу покахазаться наглым, но я работаю с андроидом на разных уровнях (от фреймворка до апликух) уже три года, причём работаю в компаниях входящих в топ 3 поставщиков смартфонов на андроиде. Поверь мне, так как ты описываешь они не делают.

                                                                                    возможно, потому что не пробовали?

                                                                                    Добавлено
                                                                                    Guy Fawkes, ладно, не хочу провоцировать ситуацию.
                                                                                    нужно пробовать... сначала установить андроид, потом разобраться если ли там какие-то ограничения.
                                                                                      Цитата niXman @
                                                                                      именно.

                                                                                      Отлично! Тогда я пишу прогу которая будет удалять всё с SD карты, а в пермишен не буду писать android.permission.WRITE_EXTERNAL_STORAGE. От юзеры повеселятся! :lol:
                                                                                      Цитата niXman @
                                                                                      возможно, потому что не пробовали?

                                                                                      Возможно потому что нейтив код очень сложно дебажить и гугл специально предоставил апи? Зайди ка на http://source.android.com/ качни сорцы и глянь сам.
                                                                                        Цитата Guy Fawkes @
                                                                                        Зайди ка на http://source.android.com/ качни сорцы и глянь сам.

                                                                                        уже :)

                                                                                        Добавлено
                                                                                        кто-то может сказать, для чего android-NDK нужен android-SDK?
                                                                                        может ли NDK работать без SDK?
                                                                                          Цитата niXman @
                                                                                          кто-то может сказать, для чего android-NDK нужен android-SDK?
                                                                                          может ли NDK работать без SDK?

                                                                                          О Боже! А как же ты Activity создашь? Камрад, бросай никсовые понты, они не работают.
                                                                                            Цитата Guy Fawkes @
                                                                                            О Боже! А как же ты Activity создашь?

                                                                                            ну хз пока. в экзамплах NDK есть пример исполняемой программы безо всяких яв.
                                                                                              Цитата niXman @
                                                                                              ну хз пока. в экзамплах NDK есть пример исполняемой программы безо всяких яв.

                                                                                              А земля стоит на 4х слонах, которые на черепахе.

                                                                                              Добавлено
                                                                                              Ну и ссылочка для извращенцев
                                                                                              Сообщение отредактировано: Guy Fawkes -
                                                                                                Guy Fawkes, спасибо за ссылки.
                                                                                                  Цитата
                                                                                                  Тоесть типа если я попробую в сях поднять вайфай то мне пермишен в манифесте не нужен

                                                                                                  Нужен.
                                                                                                  Только причем тут Java? Система на более низком уровне отлавливает попытки доступа к частям системы, для которых нужны разрешения в манифесте.
                                                                                                  Как и сказал niXman, виртуальная машина Java использует libc для взаимодействия с системой. Но это не значит, что можно просто так написать приложение на С++ для андроида без использования Java
                                                                                                    Цитата Hsilgos @
                                                                                                    Нужен.

                                                                                                    Вообще то то был сарказм. Но я, как и Шелдон Купер, не очень владею этим приёмом.
                                                                                                    Цитата Hsilgos @
                                                                                                    Но это не значит, что можно просто так написать приложение на С++ для андроида без использования Java

                                                                                                    Более того, за попытку сделать это нужно калечить при первой же возможности.
                                                                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                    0 пользователей:


                                                                                                    Рейтинг@Mail.ru
                                                                                                    [ Script execution time: 0,1081 ]   [ 15 queries used ]   [ Generated: 26.04.24, 08:37 GMT ]