Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

158 wiersze
9.8KB

  1. <!DOCTYPE html>
  2. <head>
  3. <meta charset="utf-8" />
  4. <!-- Set the viewport width to device width for mobile -->
  5. <meta name="viewport" content="width=device-width" />
  6. <title>Октябрь 2016 кратко</title>
  7. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" />
  8. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" />
  9. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" />
  10. <link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" />
  11. <script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script>
  12. <!-- So Firefox can bookmark->"abo this site" -->
  13. <link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml">
  14. </head>
  15. <body>
  16. <!-- Nav Bar -->
  17. <nav>
  18. <!-- Show menu items and pages -->
  19. <div class="row">
  20. <div class="large-12 columns top-bar">
  21. <h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1>
  22. </div>
  23. </div>
  24. <div class="row top-menu">
  25. <div class="large-12 columns">
  26. <a href="/pages/projects.html" class="menu-button secondary">Projects</a>
  27. <a href="/pages/about.html" class="menu-button secondary">About</a>
  28. </div>
  29. </div>
  30. </nav>
  31. <!-- End Nav -->
  32. <!-- Main Page Content and Sidebar -->
  33. <div class="row">
  34. <!-- Main Blog Content -->
  35. <div class="large-9 columns">
  36. <article>
  37. <header>
  38. <h3 class="article-title"><a href="http://opengamestudio.org/2016-october-recap-ru.html" rel="bookmark"
  39. title="Permalink to Октябрь 2016 кратко">Октябрь 2016 кратко</a></h3>
  40. </header>
  41. <h6 class="subheader" title="2016-11-19T00:00:00+03:00">Сб 19 ноября 2016
  42. <a class="button secondary small translation-button" href="http://opengamestudio.org/2016-october-recap.html">en</a>
  43. </h6> <p><img alt="October recap" src="http://opengamestudio.org/2016-11-19_2016-october-recap.png"></p>
  44. <p>Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.</p>
  45. <p><strong>Первая попытка собрать OSG.</strong></p>
  46. <p>Не имея опыта разработки под Android, мы взяли последнюю версию Android Studio и начали проходить самоучители для начинающих.
  47. Java далась легко. Всё работало из коробки. Затем наступил черёд C++ и проблем.</p>
  48. <p><strong>CMake. </strong>Android Studio для работы с C++ использует собственную версию CMake, которая конфликтует с системной. Для нас это было явным сигналом о необходимости подготовить отдельное окружение разработки специально под Android.</p>
  49. <p><strong>KVM. </strong>Мы установили Ubuntu на VirtualBox. Всё шло замечательно до того момента, пока мы не запустили эмулятор Android. Оказалось, что VirtualBox не может запустить эмулятор, т.к. виртуальная машина не предоставляет виртуализацию внутри уже виртуализированного окружения.</p>
  50. <p><strong>Chroot для Android. </strong>Вспомнив о положительном опыте работы с chroot для сборки OGS Editor, мы решили поместить окружение разработки Android в chroot. После небольших настроек мы сумели запустить эмулятор Android и собрать проект C++.</p>
  51. <p><strong>OSG. </strong>К этому моменту мы считали, что собрать OSG не составит труда, но не тут-то было. Всё, что мы получили, - это падение.
  52. Предположив, что мы ошиблись где-то при первой сборке, мы решили пересобрать OSG ещё раз. И снова получили ту же ошибку.
  53. Поиск решения проблемы не дал результатов.
  54. Никто не помог нам в списке рассылок OSG.</p>
  55. <p>Мы были в отчаянии.</p>
  56. <p><strong>Поиск альтернатив OSG.</strong></p>
  57. <p>Раз сообщество OSG нам не помогло, мы решили поискать альтернативный открытый проект, который мог решить наши задачи на Android (и, возможно, на других платформах).</p>
  58. <p>Такой проект мы нашли: <a href="http://babylonhx.gamestudiohx.com/">BabylonHX</a>. Домашняя страница выглядела замечательно: она отображала WebGL в фоне!
  59. Промелькнула мысль, что мы наконец нашли алмаз. К сожалению, пример на домашней странице просто не работал.</p>
  60. <p>Думаем, вы понимаете наши чувства на тот момент.</p>
  61. <p><strong>Успех в сборке OSG.</strong></p>
  62. <p>Мы осознали, что никто за нас не запустит OSG на Android. Нужно было сделать это самостоятельно.</p>
  63. <p>Потеряв доверие к очень короткой <a href="http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/178-building-openscenegraph-for-android-3-4">документации OSG 3.4</a> по сборке для Android, мы решили использовать <a href="http://www.openscenegraph.org/index.php/documentation/platform-specifics/android/44-building-openscenegraph-for-android-3-0-3-0-1">первоначальную документацию OSG 3.0</a>.
  64. В ходе следования ей мы наткнулись на мёртвую ссылку, которая должна была содержать зависимости.
  65. Поиск альтернативной ссылки вывел нас на <a href="https://xinyustudio.wordpress.com/2013/09/24/install-osg-for-android-on-ubuntu-13-04-step-by-step-tutorials/">самоучитель 2013 года</a> по сборке OSG 3.0 для Android.</p>
  66. <p>После прохождения самоучителя мы наконец смогли запустить OSG под Android!
  67. Тем не менее, был нюанс: используемые в самоучителе версии OSG и средств разработки Android были древними.
  68. В течение нескольких дней мы постепенно довели версии OSG и средств разработки Android до последних.</p>
  69. <p>В ходе этого обновления мы узнали о двух вещах, помешавших нам запустить OSG с первого раза:</p>
  70. <ul>
  71. <li>Изменение заголовков Android API в NDK r12</li>
  72. <li>OSG работает под Android лишь в виде статической библиотеки</li>
  73. </ul>
  74. <p>На этом мы заканчиваем описание того, как мы потратили месяц на сборку OSG под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.</p>
  75. <p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
  76. </p>
  77. </article>
  78. </div>
  79. <!-- End Main Content -->
  80. <!-- Sidebar -->
  81. <aside class="large-3 columns">
  82. <!--k
  83. <h5 class="sidebar-title">Site</h5>
  84. <ul class="side-nav">
  85. <li><a href="http://opengamestudio.org/archives.html">Archives</a>
  86. <li><a href="http://opengamestudio.org/tags.html">Tags</a>
  87. <li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li>
  88. </ul>
  89. <h5 class="sidebar-title">Categories</h5>
  90. <ul class="side-nav">
  91. <li><a href="http://opengamestudio.org/category/news.html">News</a></li>
  92. </ul>
  93. -->
  94. <h5 class="sidebar-title">Ads</h5>
  95. <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
  96. <!-- ogs2 -->
  97. <ins class="adsbygoogle"
  98. style="display:block"
  99. data-ad-client="ca-pub-4473792248813084"
  100. data-ad-slot="9024247127"
  101. data-ad-format="auto"></ins>
  102. <script>
  103. (adsbygoogle = window.adsbygoogle || []).push({});
  104. </script>
  105. </aside> <!-- End Sidebar -->
  106. </div> <!-- End Main Content and Sidebar -->
  107. <!-- Footer -->
  108. <footer class="row">
  109. <div class="large-12 columns">
  110. <hr />
  111. <div class="row">
  112. <div class="large-7 columns">
  113. <p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p>
  114. </div>
  115. </div>
  116. </div>
  117. <script type="text/javascript">
  118. var _gaq = _gaq || [];
  119. _gaq.push(['_setAccount', 'UA-3773114-1']);
  120. _gaq.push(['_trackPageview']);
  121. (function() {
  122. var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  123. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  124. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  125. })();
  126. </script>
  127. </footer>