<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Типичный Android</title>
	<atom:link href="http://luchaninov.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://luchaninov.wordpress.com</link>
	<description>Brain: the devil inside</description>
	<lastBuildDate>Tue, 26 Jul 2011 20:01:26 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='luchaninov.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Типичный Android</title>
		<link>http://luchaninov.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://luchaninov.wordpress.com/osd.xml" title="Типичный Android" />
	<atom:link rel='hub' href='http://luchaninov.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Интеграция работы с нативным кодом на С/С++ для android в Eclipce (на примере, под Ubuntu). &#8211; часть 3</title>
		<link>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0-3/</link>
		<comments>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0-3/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 18:00:45 +0000</pubDate>
		<dc:creator>luchaninov</dc:creator>
				<category><![CDATA[android ndk]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[ndk]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://luchaninov.wordpress.com/?p=180</guid>
		<description><![CDATA[Настройка Eclipse для отладки нативного кода проекта. Начало&#8230; 1) Устанавливаем breakepoint после загрузки библиотеки и перед вызовом нативной функции, запускаем проект на отладку и ждем его остановки на breakepoint. Если хотите можно переключится и Debag перспективу, это сейчас не важно. 2) Запускаем терминал переходим в директорию Вашего проекта и вводим команду ndk-gdb. Данная команда запустила [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=180&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Настройка Eclipse для отладки нативного кода проекта.</strong></p>
<p><a href="http://luchaninov.wordpress.com/2011/06/10/%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC-%D0%BA%D0%BE%D0%B4%D0%BE%D0%BC-%D0%BD%D0%B0-2/" title="Начало...">Начало&#8230;</a></p>
<p>1) Устанавливаем breakepoint после загрузки библиотеки и перед вызовом нативной функции, запускаем проект на отладку и ждем его остановки на  breakepoint. Если хотите можно переключится и Debag перспективу, это сейчас не важно.<br />
2) Запускаем терминал переходим в директорию Вашего проекта и вводим команду ndk-gdb. Данная команда запустила скрипт который сгенерировал сервер gbd отладчика в папке obj/local/armearbi. Теперь можно выйти из него в терминале.<br />
3) Собственно теперь нам необходимо перейти в директорию obj/local/armearb проекта(хотя вроде уже там) и создать копию файла gdb.setup назвав ее gdb2.setup.<br />
4) Теперь необходимо отредактировать файл наш gdb2.setup. А именно в нем просто удалить последнюю строчку: «target remote :5039». Эти параметры мы укажем позже при настройке Eclipce, там требуется.<br />
5) Переходим в директорию с ndk  и создаем в ней опять копию файла ndk-gdb назвав к примеру его ndk-gdb-eclipse.<br />
6) Редактируем файл  ndk-gdb-eclipse, нам необходимо удалить или закомментировать последнюю 581 строку скрипта чтобы конец файла приобрел к примеру следующий вид:</p>
<pre class="brush: bash;">
echo &quot;file `native_path $APP_PROCESS`&quot; &gt;&gt; $GDBSETUP
echo &quot;target remote :$DEBUG_PORT&quot; &gt;&gt; $GDBSETUP
if [ -n &quot;$OPTION_EXEC&quot; ] ; then
    cat $OPTION_EXEC &gt;&gt; $GDBSETUP
fi
##$GDBCLIENT -x `native_path $GDBSETUP`
</pre>
<p>7) Настройка проекта Eclipse для отладки. Создаем новую Debug configuration, назвав ее как нибудь осмысленно (например «NativeExample native debug»). Совет: переименуйте отладочную конфигурацию для андроида тоже в что нибудь осмысленное.<br />
На закладке main в поле С/С++ Aplication указываем путь к сгенерированому gdb приложению в папке проекта obj/local/armearbi &#8211; «app_process».<br />
Необходимо также выбрать Standard Create Process Launcher нажав на синюю ссылку внизу окна Select other… .</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/7.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/7.jpg?w=300&#038;h=195" alt="" title="7" width="300" height="195" class="aligncenter size-medium wp-image-181" /></a></p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/8.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/8.jpg?w=300&#038;h=296" alt="" title="8" width="300" height="296" class="aligncenter size-medium wp-image-182" /></a></p>
<p>В закладке Debugger в поле Debugger указываем gdbserver. В поле Stop on startup название нативной функции при входе в которую отладчик остановится, в нашем случае это Java_com_example_NativeLib_function.<br />
В поле  GDB debugger указываем путь к gdb для андроида ${ndk_dir}/ toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb. В поле  GDB command line нам необходимо указать путь к созданному нами файлу  gdb2.setup.</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/9.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/9.jpg?w=300&#038;h=220" alt="" title="9" width="300" height="220" class="aligncenter size-medium wp-image-183" /></a></p>
<p>В закладке Connection выставляем TCP localhost 5039.<br />
И на всякий случай проверяем что бы в закладке Common  у Вас стояла галочка в Debug конфигурации.</p>
<p><strong>Отладка проекта в Eclipse.</strong></p>
<p>1) Ставим точку в Java коде проекта перед вызовом нативной функции <em>после загрузки библиотеки</em>, запускаем АНДРОИД  конфигурацию для отладки и ждем остановки на breakpoint&#8217;е, переходим в Debug перспективу Eclipse.<br />
2) Из терминала в директории проекта выполняем команду ndk-gdb-eclipse, которая запускает gdb сервер для нашего проекта<br />
3) Переходим в  Eclipse запускаем нативную конфигурацию для отладки: Стрелочка возле жука вниз и выбираем нужную нам конфигурациюв нашем случае «NativeExample native debug»<br />
4) И жмем кнопку Resume (зеленую стрелочку) в Debug перспективе.</p>
<p><strong>Все <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Вас переключило в отладку нативного кода в самое начало функции как мы и хотели.<br />
Теперь можно устанавливать в С/С++ breakpoint&#8217;ы и отлаживать нативный код.</strong></p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/10.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/10.jpg?w=300&#038;h=228" alt="" title="10" width="300" height="228" class="aligncenter size-medium wp-image-184" /></a></p>
<p>Честно говоря когда была написана половина данной статьи нашел <a href="http://mhandroid.wordpress.com/" title="блог">блог</a> из которого почерпнул для себя много интересного. Часть этого вошло в статью <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luchaninov.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luchaninov.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luchaninov.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luchaninov.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luchaninov.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luchaninov.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luchaninov.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luchaninov.wordpress.com/180/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=180&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0-3/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3cbf75bb8645cfac3754788c3a0500d4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">luchaninov</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/7.jpg?w=300" medium="image">
			<media:title type="html">7</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/8.jpg?w=300" medium="image">
			<media:title type="html">8</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/9.jpg?w=300" medium="image">
			<media:title type="html">9</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/10.jpg?w=300" medium="image">
			<media:title type="html">10</media:title>
		</media:content>
	</item>
		<item>
		<title>Интеграция работы с нативным кодом на С/С++ для android в Eclipce (на примере, под Ubuntu). &#8211; часть 2</title>
		<link>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0-2/</link>
		<comments>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0-2/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 17:47:06 +0000</pubDate>
		<dc:creator>luchaninov</dc:creator>
				<category><![CDATA[android ndk]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[ndk]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://luchaninov.wordpress.com/?p=173</guid>
		<description><![CDATA[Компиляция проекта. Часть 1. 1)Заходим в свойства проекта и выбираем пункт С/С++ Build. Убираем галочку Use default build comand и вписываем команду для сборки С/С++ части &#8211; «ndk-build» Переходим на закладку Behavior и выставляем следующие галочки: Убираем галочку clean — ndk чистит проект автоматически и не поддерживает данную комманду, ndk-build также не поддерживает команду all, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=173&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Компиляция проекта.</strong></p>
<p><a href="http://luchaninov.wordpress.com/2011/06/10/%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC-%D0%BA%D0%BE%D0%B4%D0%BE%D0%BC-%D0%BD%D0%B0/" title="Начало...">Часть 1.</a></p>
<p>1)Заходим в свойства проекта и выбираем пункт С/С++ Build. Убираем галочку Use default build comand и вписываем команду для сборки С/С++ части &#8211; «ndk-build»</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/4.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/4.jpg?w=300&#038;h=173" alt="" title="4" width="300" height="173" class="aligncenter size-medium wp-image-174" /></a></p>
<p>Переходим на закладку Behavior и выставляем следующие галочки:</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/5.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/5.jpg?w=300&#038;h=172" alt="" title="5" width="300" height="172" class="aligncenter size-medium wp-image-175" /></a></p>
<p>Убираем галочку clean — ndk чистит проект автоматически и не поддерживает данную комманду, ndk-build также не поддерживает команду all, поэтому ее стираем.<br />
Нажимаете кнопку Apply и вам выдает ошибку в коде С++, потому что Eclipce не видит необходимых библиотек.</p>
<p>2) Добавляем пути. В этом же окне в категории C/C++ General-&gt;Paths and Symbols в закладке Includes в категории С и С++ указываем пути к библиотекам необходимой таргет версии ${ndk_dir}/platforms/android-${target_version}/arch-arm/usr/include. Где ${ndk_dir} директория ndk, а ${target_version} — цифра таргет версии.<br />
А в закладке С++ добавляем путь к заголовочным stdlib файлам {ndk_dir}/sources/cxx-stl/gnu-libstdc++/include</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/6.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/6.jpg?w=300&#038;h=184" alt="" title="6" width="300" height="184" class="aligncenter size-medium wp-image-176" /></a></p>
<p>3)Нажимаем Apply и соглашаемся собрать проект, в консоли видим следующее: </p>
<blockquote><p>
**** Build of configuration Default for project NativeExample ****</p>
<p>ndk-build<br />
Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver<br />
Gdbsetup       : libs/armeabi/gdb.setup<br />
Install        : libnative_lab.so =&gt; libs/armeabi/libnative_lab.so
</p></blockquote>
<p>Что сигнализирует нам что нативная библиотека скомпилировалась и собралась удачно. В проекте при этом появилась папка obj в которую поместили нашу скомпилированную библиотеку libnative_lab.so</p>
<p>4)Помещаем вызов нашей библиотеки например в метод onCreate вашей активити:</p>
<pre class="brush: java;">
String string=&quot;blablabla&quot;;
NativeLib lib = new NativeLib();
String result = lib.function(string.getBytes());
Log.i(&quot;NativeExample&quot;, result);
</pre>
<p>И нажимаем кнопку Run. И опять продолжение <a href="http://luchaninov.wordpress.com/2011/06/10/%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC-%D0%BA%D0%BE%D0%B4%D0%BE%D0%BC-%D0%BD%D0%B0-3/" title="следует">следует</a>&#8230; <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luchaninov.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luchaninov.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luchaninov.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luchaninov.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luchaninov.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luchaninov.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luchaninov.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luchaninov.wordpress.com/173/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=173&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3cbf75bb8645cfac3754788c3a0500d4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">luchaninov</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/4.jpg?w=300" medium="image">
			<media:title type="html">4</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/5.jpg?w=300" medium="image">
			<media:title type="html">5</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/6.jpg?w=300" medium="image">
			<media:title type="html">6</media:title>
		</media:content>
	</item>
		<item>
		<title>Интеграция работы с нативным кодом на С/С++ для android в Eclipce (на примере, под Ubuntu). &#8211; часть 1</title>
		<link>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0/</link>
		<comments>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 17:32:46 +0000</pubDate>
		<dc:creator>luchaninov</dc:creator>
				<category><![CDATA[android ndk]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[ndk]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://luchaninov.wordpress.com/?p=165</guid>
		<description><![CDATA[Создание проекта. 1)Необходимо добавить путь к директории с ndk в переменные среды, без этого все дальнейшее бесполезно. 2)Для создания андроид проекта с нативным кодом на С и С++ необходимо учесть несколько важных следующих замечаний (в качестве рекомендаций, можно и без них, но будет сложнее): Расположение папки workspace для Eclipce должно быть таким, чтобы ndk имел [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=165&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Создание проекта.</strong></p>
<p>1)Необходимо добавить путь к директории с ndk в переменные среды, без этого все дальнейшее бесполезно.<br />
2)Для создания андроид проекта с нативным кодом на С и С++ необходимо учесть несколько важных следующих замечаний (в качестве рекомендаций, можно и без них, но будет сложнее):</p>
<p>Расположение папки workspace для Eclipce должно быть таким, чтобы ndk имел права записи в эту папку и мог изменять свойства файлов расположенных в этой папке. То есть например чтобы папка с ndk и папка  workspace находились в домашней директории пользователя, а не на смонтированном носителе.<br />
Крайне желательно чтобы пути к SDK, NDK и проекту содержали только латинские символы без пробелов.<br />
Версия ndk желательна выше 5. В этом случае вы без особого труда сможете использовать stdlib</p>
<p>В случае если Вы собираетесь отлаживать нативный код:</p>
<p>Target SDK версия для проекта должна быть не меньше 9</p>
<pre class="brush: java;"> android:minSdkVersion=&quot;9&quot;</pre>
<p>В AndroidManifest.xml должен быть установлен флаг</p>
<pre class="brush: java;"> android:debuggable=&quot;true&quot;</pre>
<p>3)Необходимо установить CDT(C and C++ Development Tools) для Eclipce. Help-&gt;Install New Software выбираем репозиторий Вашей версии  Eclipce(например Helios &#8211; http://download.eclipse.org/releases/helios) в ней Programming Languages и в ней C and C++ Development Tools.</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/1.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/1.jpg?w=300&#038;h=232" alt="" title="1" width="300" height="232" class="aligncenter size-medium wp-image-166" /></a></p>
<p>4) Следующим шагом нам необходимо сконвертировать Ваш уже созданый андроид проект в совместный проект Java и C++. Нажимаем на проекте правой кнопкой New-&gt;Other (или Ctrl+n) и в открывшемся окне выбираем Convert to C/C++ Project жмем Next</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/2.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/2.jpg?w=300&#038;h=215" alt="" title="2" width="300" height="215" class="aligncenter size-medium wp-image-167" /></a></p>
<p>на втором шаге выбираем Makefile project-&gt;&#8211;Other Toolchain&#8211;</p>
<p><a href="http://luchaninov.files.wordpress.com/2011/06/3.jpg"><img src="http://luchaninov.files.wordpress.com/2011/06/3.jpg?w=297&#038;h=300" alt="" title="3" width="297" height="300" class="aligncenter size-medium wp-image-168" /></a></p>
<p>Жмем Finish и в консоли  Eclipce видим ошибку: «**** Build of configuration Default for project NativeExample **** make all make: *** Нет правила для сборки цели `all&#8217;.  Останов.»<br />
Все правильно — среда не видит ни правил сборки нативного кода ни самого кода.</p>
<p>5)Работа с JNI: Создадим класс- обертку для вызова наших нативных функций.</p>
<pre class="brush: java;">
package com.example;
public class NativeLib {
	static{
		System.loadLibrary(&quot;native_lab&quot;);
	}
	public native String function(byte[] string);
}
</pre>
<p>Создаем папке проекта папку jni. В ней будет находится весь код на С и С++ и правила сборки. Переходим в деррикторию bin нашего проекта и выполняем из терминала следующую команду javah -jni com.example.NativeLib, которая генерирует заголовочный файл вызова Ваших нативных функций для С в соответствии с правилами JNI.</p>
<pre class="brush: cpp;">
/* DO NOT EDIT THIS FILE - it is machine generated */
#include &lt;jni.h&gt;
/* Header for class com_example_NativeLib */

#ifndef _Included_com_example_NativeLib
#define _Included_com_example_NativeLib
#ifdef __cplusplus
extern &quot;C&quot; {
#endif
/*
 * Class:     com_example_NativeLib
 * Method:    function
 * Signature: ([B)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_NativeLib_function
  (JNIEnv *, jobject, jbyteArray);

#ifdef __cplusplus
}
#endif
#endif
</pre>
<p>Переносим сгенерированный h файл в директорию jni. Осталось добавить только реализацию на С нашей функции в новом файле (например native.cpp):</p>
<pre class="brush: cpp;">
#include &lt;cstdlib&gt;
#include &quot;android_log.h&quot;
#include &quot;com_example_NativeLib.h&quot;

jstring JNICALL Java_com_example_NativeLib_function
  (JNIEnv * env, jobject obj, jbyteArray string){

	// get &quot;string&quot; from JVM
	const size_t STRING_LENGTH = env-&gt;GetArrayLength(string);
	char * buffer = new char[STRING_LENGTH];
	env-&gt;GetByteArrayRegion(string, 0, STRING_LENGTH, (jbyte*) buffer);
	env-&gt;ReleaseByteArrayElements(string, (jbyte*) buffer, 0);

	LOGI(buffer);

	jstring result = env-&gt;NewStringUTF(&quot;done&quot;);
	return result;
}
</pre>
<p>6)Создаем правила сборки С/С++ библиотеки, для этого необходимо создать два мейкфайла Application.mk Android.mk в папке jni. Первый отвечает за общую сборку, второй за сборку модулей.</p>
<p>Application.mk:</p>
<pre class="brush: bash;">
# как будет оптимизироватся библиотека
#APP_OPTIM := debug

# подключение stllib
#only if you platform upper then 2.2
#APP_STL :=gnustl_static
# platform 1.6
APP_STL :=stlport_static

# библиотека которую собираем
APP_MODULES := native_lab
</pre>
<p>Android.mk:</p>
<pre class="brush: bash;">
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
# библиотека которую собираем
LOCAL_MODULE    := native_lab
# исходные файлы через пробел
LOCAL_SRC_FILES := native.cpp
# библиотека для работы с логом андроида
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)
</pre>
<p>7)Пишем в лог андроида. Для удобства создадим заголовочный файл android_log.h следующего вида:</p>
<pre class="brush: cpp;">
#include &lt;android/log.h&gt;

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, &quot;NativeExample native&quot;,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , &quot;NativeExample native&quot;,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO   , &quot;NativeExample native&quot;,__VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN   , &quot;NativeExample native&quot;,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , &quot;NativeExample native&quot;,__VA_ARGS__)
</pre>
<p>Пример использования виден выше в  native.cpp.</p>
<p>Продолжение <a href="http://luchaninov.wordpress.com/2011/06/10/%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC-%D0%BA%D0%BE%D0%B4%D0%BE%D0%BC-%D0%BD%D0%B0-2/" title="следует">следует</a>&#8230; <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luchaninov.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luchaninov.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luchaninov.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luchaninov.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luchaninov.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luchaninov.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luchaninov.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luchaninov.wordpress.com/165/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=165&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luchaninov.wordpress.com/2011/06/10/%d0%b8%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%bc-%d0%ba%d0%be%d0%b4%d0%be%d0%bc-%d0%bd%d0%b0/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3cbf75bb8645cfac3754788c3a0500d4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">luchaninov</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/1.jpg?w=300" medium="image">
			<media:title type="html">1</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/2.jpg?w=300" medium="image">
			<media:title type="html">2</media:title>
		</media:content>

		<media:content url="http://luchaninov.files.wordpress.com/2011/06/3.jpg?w=297" medium="image">
			<media:title type="html">3</media:title>
		</media:content>
	</item>
		<item>
		<title>О чем&#8230;.</title>
		<link>http://luchaninov.wordpress.com/2010/12/04/%d0%be-%d1%87%d0%b5%d0%bc/</link>
		<comments>http://luchaninov.wordpress.com/2010/12/04/%d0%be-%d1%87%d0%b5%d0%bc/#comments</comments>
		<pubDate>Sat, 04 Dec 2010 14:46:33 +0000</pubDate>
		<dc:creator>luchaninov</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://luchaninov.wordpress.com/?p=137</guid>
		<description><![CDATA[Собственно данный блог будет посвящен моему увлечению программированием (А теперь уже и моей профессии). А именно проектам на Android&#8217;e.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=137&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Собственно данный блог будет посвящен моему увлечению программированием (А теперь уже и моей профессии).</p>
<p>А именно проектам на Android&#8217;e.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luchaninov.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luchaninov.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luchaninov.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luchaninov.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luchaninov.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luchaninov.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luchaninov.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luchaninov.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luchaninov.wordpress.com&amp;blog=3913918&amp;post=137&amp;subd=luchaninov&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luchaninov.wordpress.com/2010/12/04/%d0%be-%d1%87%d0%b5%d0%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3cbf75bb8645cfac3754788c3a0500d4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">luchaninov</media:title>
		</media:content>
	</item>
	</channel>
</rss>
