<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <base target="_top"> <style type="text/css"> /* default css */ table { font-size: 1em; line-height: inherit; } tr { text-align: left; } div, address, ol, ul, li, option, select { margin-top: 0px; margin-bottom: 0px; } p { margin: 0px; } body { margin: 6px; padding: 0px; font-family: Verdana, sans-serif; font-size: 10pt; background-color: #ffffff; } img { -moz-force-broken-image-icon: 1; } @media screen { html.pageview { background-color: #f3f3f3 !important; } body { min-height: 1100px; counter-reset: __goog_page__; } * html body { height: 1100px; } .pageview body { border-top: 1px solid #ccc; border-left: 1px solid #ccc; border-right: 2px solid #bbb; border-bottom: 2px solid #bbb; width: 648px !important; margin: 15px auto 25px; padding: 40px 50px; } /* IE6 */ * html { overflow-y: scroll; } * html.pageview body { overflow-x: auto; } /* Prevent repaint errors when scrolling in Safari. This "Star-7" css hack targets Safari 3.1, but not WebKit nightlies and presumably Safari 4. That's OK because this bug is fixed in WebKit nightlies/Safari 4 :-). */ html*#wys_frame::before { content: '\A0'; position: fixed; overflow: hidden; width: 0; height: 0; top: 0; left: 0; } .writely-callout-data { display: none; *display: inline-block; *width: 0; *height: 0; *overflow: hidden; } .writely-footnote-marker { background-image: url('MISSING'); background-color: transparent; background-repeat: no-repeat; width: 7px; overflow: hidden; height: 16px; vertical-align: top; -moz-user-select: none; } .editor .writely-footnote-marker { cursor: move; } .writely-footnote-marker-highlight { background-position: -15px 0; -moz-user-select: text; } .writely-footnote-hide-selection ::-moz-selection, .writely-footnote-hide-selection::-moz-selection { background: transparent; } .writely-footnote-hide-selection ::selection, .writely-footnote-hide-selection::selection { background: transparent; } .writely-footnote-hide-selection { cursor: move; } .editor .writely-comment-yellow { background-color: #FF9; background-position: -240px 0; } .editor .writely-comment-yellow-hover { background-color: #FF0; background-position: -224px 0; } .editor .writely-comment-blue { background-color: #C0D3FF; background-position: -16px 0; } .editor .writely-comment-blue-hover { background-color: #6292FE; background-position: 0 0; } .editor .writely-comment-orange { background-color: #FFDEAD; background-position: -80px 0; } .editor .writely-comment-orange-hover { background-color: #F90; background-position: -64px 0; } .editor .writely-comment-green { background-color: #99FBB3; background-position: -48px 0; } .editor .writely-comment-green-hover { background-color: #00F442; background-position: -32px 0; } .editor .writely-comment-cyan { background-color: #CFF; background-position: -208px 0; } .editor .writely-comment-cyan-hover { background-color: #0FF; background-position: -192px 0; } .editor .writely-comment-purple { background-color: #EBCCFF; background-position: -144px 0; } .editor .writely-comment-purple-hover { background-color: #90F; background-position: -128px 0; } .editor .writely-comment-magenta { background-color: #FCF; background-position: -112px 0; } .editor .writely-comment-magenta-hover { background-color: #F0F; background-position: -96px 0; } .editor .writely-comment-red { background-color: #FFCACA; background-position: -176px 0; } .editor .writely-comment-red-hover { background-color: #FF7A7A; background-position: -160px 0; } .editor .writely-comment-marker { background-image: url('MISSING'); background-color: transparent; padding-right: 11px; background-repeat: no-repeat; width: 16px; height: 16px; -moz-user-select: none; } .editor .writely-comment-hidden { padding: 0; background: none; } .editor .writely-comment-marker-hidden { background: none; padding: 0; width: 0; } .editor .writely-comment-none { opacity: .2; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20); -moz-opacity: .2; } .editor .writely-comment-none-hover { opacity: .2; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20); -moz-opacity: .2; } .br_fix br:not(:-moz-last-node):not(:-moz-first-node) { position:relative; left: -1ex } .br_fix br+br { position: static !important } } h6 { font-size: 8pt } h5 { font-size: 8pt } h4 { font-size: 10pt } h3 { font-size: 12pt } h2 { font-size: 14pt } h1 { font-size: 18pt } blockquote {padding: 10px; border: 1px #DDD dashed } a img {border: 0} .pb { border-width: 0; page-break-after: always; /* We don't want this to be resizeable, so enforce a width and height using !important */ height: 1px !important; width: 100% !important; } .editor .pb { border-top: 1px dashed #C0C0C0; border-bottom: 1px dashed #C0C0C0; } div.google_header, div.google_footer { position: relative; margin-top: 1em; margin-bottom: 1em; } /* Table of contents */ .editor div.writely-toc { background-color: #f3f3f3; border: 1px solid #ccc; } .writely-toc > ol { padding-left: 3em; font-weight: bold; } ol.writely-toc-subheading { padding-left: 1em; font-weight: normal; } /* IE6 only */ * html writely-toc ol { list-style-position: inside; } .writely-toc-none { list-style-type: none; } .writely-toc-decimal { list-style-type: decimal; } .writely-toc-upper-alpha { list-style-type: upper-alpha; } .writely-toc-lower-alpha { list-style-type: lower-alpha; } .writely-toc-upper-roman { list-style-type: upper-roman; } .writely-toc-lower-roman { list-style-type: lower-roman; } .writely-toc-disc { list-style-type: disc; } /* end default css */ /* default print css */ @media print { body { padding: 0; margin: 0; } div.google_header, div.google_footer { display: block; min-height: 0; border: none; } div.google_header { flow: static(header); } /* used to insert page numbers */ div.google_header::before, div.google_footer::before { position: absolute; top: 0; } div.google_footer { flow: static(footer); } /* always consider this element at the start of the doc */ div#google_footer { flow: static(footer, start); } span.google_pagenumber { content: counter(page); } span.google_pagecount { content: counter(pages); } callout.google_footnote { display: prince-footnote; footnote-style-position: inside; /* These styles keep the footnote from taking on the style of the text surrounding the footnote marker. They can be overridden in the document CSS. */ color: #000; font-family: Verdana; font-size: 10.0pt; font-weight: normal; } /* Table of contents */ #WritelyTableOfContents a::after { content: leader('.') target-counter(attr(href), page); } #WritelyTableOfContents a { text-decoration: none; color: black; } } @page { @top { content: flow(header); } @bottom { content: flow(footer); } @footnotes { border-top: solid black thin; padding-top: 8pt; } } /* end default print css */ /* custom css */ /* end custom css */ /* ui edited css */ body { font-family: Verdana; font-size: 10.0pt; line-height: normal; background-color: #ffffff; } /* end ui edited css */ /* editor CSS */ .editor a:visited {color: #551A8B} .editor table.zeroBorder {border: 1px dotted gray} .editor table.zeroBorder td {border: 1px dotted gray} .editor table.zeroBorder th {border: 1px dotted gray} .editor div.google_header, .editor div.google_footer { border: 2px #DDDDDD dashed; position: static; width: 100%; min-height: 2em; } .editor .misspell {background-color: yellow} .editor .writely-comment { font-size: 9pt; line-height: 1.4; padding: 1px; border: 1px dashed #C0C0C0 } /* end editor CSS */ </style> </head> <body onload="DoPageLoad();" revision="cfnx2f69_111dp3jzfgb:107"> <h1> Using the Android Native Development Kit (NDK) </h1> version 1.3<br> <br> <h2> Introduction </h2> The Android Native Development Kit enables developers to write shared libraries in C or C++ and call them from Java code. The native shared libraries can be packaged into apk files along with a normal Android application written in Java, so that the resulting Android application can be downloaded and installed on an Android phone.<br> <br> The Native Development Kit consists of:<br> <ul> <li> C/C++ headers for native APIs<br> </li> <li> C/C++ libraries for native APIs<br> </li> <li> Documentation </li> <li> Sample Code </li> </ul> <br> The Native Development Kit is designed to be used with the Android SDK:<br> <ul> <li> The NDK is used to create a shared library containing native code. </li> <li> The SDK is used to create an Android application written in Java that calls into the native code shared library. </li> </ul> <h1> </h1> <h2> Setting up your machine<br> </h2> The Native Development Kit may be installed on either Linux or OS X. Developing under Windows is not yet supported.<br> <div> <h3> Linux Installation </h3> The Android build is routinely tested on recent versions of Ubuntu (6.06 and later), but may work on other distributions as well.<br> <h4> <a name=TOC-Ubuntu-Linux-i386-></a><span style=FONT-FAMILY:Verdana>Ubuntu Linux (i386)</span> </h4> <div style=FONT-FAMILY:Verdana> To set up your Linux development environment, make sure you have the following:<span style="WORD-SPACING:0px; FONT-STYLE:normal; FONT-VARIANT:normal; FONT-WEIGHT:normal; font-size-adjust:none; font-stretch:normal; TEXT-TRANSFORM:none; COLOR:#000000; WHITE-SPACE:normal; LETTER-SPACING:normal; border-collapse:separate"><font size=2> </font></span> </div> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px; FONT-FAMILY:Verdana"> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px"> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px"> <ul style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px"> <li style="MARGIN-TOP:8px; MARGIN-BOTTOM:8px"> Git 1.5.4 or newer<span style="FONT-WEIGHT:normal; WORD-SPACING:0px; TEXT-TRANSFORM:none; COLOR:#000000; FONT-STYLE:normal; WHITE-SPACE:normal; LETTER-SPACING:normal; border-collapse:separate; FONT-VARIANT:normal"><font size=2>. </font></span> </li> </ul> </div> </div> </div> <blockquote style="BORDER:medium none ; MARGIN:0pt 0pt 0pt 40px; PADDING:0px"> <span style=FONT-FAMILY:arial><span style="FONT-WEIGHT:normal; WORD-SPACING:0px; TEXT-TRANSFORM:none; COLOR:#000000; FONT-STYLE:normal; WHITE-SPACE:normal; LETTER-SPACING:normal; border-collapse:separate; FONT-VARIANT:normal"><span style="FONT-FAMILY:courier new,monospace">$ </span></span><span style="FONT-FAMILY:courier new,monospace">sudo apt-get install git-core<br> </span></span> </blockquote> <div> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px"> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px; FONT-FAMILY:arial,sans-serif"> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px"> <h4> <a name=TOC-Ubuntu-Linux-amd64-></a><span style=FONT-FAMILY:Verdana>Ubuntu Linux (amd64)</span> </h4> <span style=FONT-FAMILY:Verdana>This has not been as well tested.</span> </div> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px; FONT-FAMILY:Verdana"> <br> </div> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px; FONT-FAMILY:Verdana"> The Android build requires a 32-bit build environment: </div> <div style="MARGIN-TOP:0px; MARGIN-BOTTOM:0px; FONT-FAMILY:Verdana"> <ul> <li> Get the packages as listed above in the i386 instructions:<span style="FONT-WEIGHT:normal; WORD-SPACING:0px; TEXT-TRANSFORM:none; COLOR:#000000; FONT-STYLE:normal; WHITE-SPACE:normal; LETTER-SPACING:normal; border-collapse:separate; FONT-VARIANT:normal"> </span> </li> </ul> </div> </div> </div> </div> <blockquote style="BORDER:medium none ; MARGIN:0pt 0pt 0pt 40px; PADDING:0px"> <span style=FONT-FAMILY:arial><span style="FONT-WEIGHT:normal; WORD-SPACING:0px; TEXT-TRANSFORM:none; COLOR:#000000; FONT-STYLE:normal; WHITE-SPACE:normal; LETTER-SPACING:normal; border-collapse:separate; FONT-VARIANT:normal"><span style="FONT-FAMILY:courier new,monospace">$ </span></span><span style="FONT-FAMILY:courier new,monospace">sudo apt-get install git-core<br> </span></span> </blockquote> <h4> <a name=TOC-Other-Linux></a>Other Linux </h4> <p> There's no reason why Android cannot be built on non-Ubuntu systems<span style=FONT-WEIGHT:normal><font size=2>. In general you will need:</font></span> </p> <ul> <li> Git 1.5.4 or newer. You can find it at <a href=http://git.or.cz/ rel=nofollow>http://git.or.cz/</a><span style=FONT-FAMILY:arial></span> </li> </ul> <div> <h3> Mac OS Installation </h3> <ul> <li> <span style=FONT-FAMILY:arial,sans-serif>To build the Android files in a Mac OS environment, you need an Intel/x86 machine. The Android build system and tools do not support the older PowerPC architecture.</span> </li> <li> <span style=FONT-FAMILY:arial,sans-serif>Android must be built on a case-sensitive file system.<br> </span> </li> <ul> <li> We recommend that you build Android on a partition that has been formatted with the "Case-sensitive Journaled HFS+" file system: </li> <ul> <li> A case-sensitive file system is required because the sources contain files that differ only in case. </li> <li> Journaled systems are more robust. (This is optional, but recommended.) </li> <li> HFS+ is required to successfully build Mac OS applications such as the Android Emulator for OS X. </li> </ul> <li> If you want to avoid partitioning/formatting your hard drive, you can use a case-sensitive disk image instead. </li> <ul> <li> To create the image:<br> <ul> <li> launch /Applications/Utilities/Disk Utility </li> <li> select "New Image" </li> <li> size: 8 GB (this will work, but you can choose more if you want to) </li> <li> volume format: case sensitive, journaled </li> </ul> </li> <li> This will create a .dmg file which, once mounted, acts as a drive with the required formatting for Android development. For a disk image named "android.dmg" stored in your home directory, you can add the following to your ~/.bash_profile to mount the image when you execute "mountAndroid":<br> <br> <div style=MARGIN-LEFT:40px> <span style="FONT-FAMILY:courier new,monospace"># command to mount the android file image</span><br style="FONT-FAMILY:courier new,monospace"> <span style="FONT-FAMILY:courier new,monospace">function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }</span><br> </div> <br> Once mounted, you'll do all your work in the "android" volume. You can eject it (unmount it) just like you would with an external drive. </li> </ul> </ul> </ul> <div> <br> <ul> <li> Install git 1.5.4 or newer. You can find it at <a href=http://git.or.cz/ rel=nofollow>http://git.or.cz/</a> </li> </ul> <h2> Installing the Android SDK </h2> The Android NDK uses the Android SDK. You can find the Android SDK at <a href=http://code.google.com/android/download.html id=a.-o title=http://code.google.com/android/download.html>http://code.google.com/android/download.html</a><br> This version of the Android NDK requires the Cupcake version of the Android SDK.<br> <br> <h2> Installing the Prebuilt Native Toolchain<br> </h2> The NDK uses the prebuilt native toolchain from the Android Open Source git repository.<br> <br> To download the prebuilt native toolchain to your working directory, execute the following commands:<br> <br> <span style="FONT-FAMILY:Courier New"></span> <div style=MARGIN-LEFT:40px> <span style="FONT-FAMILY:Courier New">git clone git://android.git.kernel.org/platform/prebuilt.git</span><br> <span style="FONT-FAMILY:Courier New">cd prebuilt</span><br> <span style="FONT-FAMILY:Courier New">git checkout -b cupcake -t origin/cupcake</span><br> </div> <div style=MARGIN-LEFT:40px> <span style="FONT-FAMILY:Courier New"></span> </div> <br> <h2> Setting Environment Variables </h2> The NDK requires that you set two environment variables:<br> <ul> <li> PREBUILT must be set to the directory that contains the prebuilt toolchain. Include the "prebuilt" directory in the path. Example: /Volumes/android/prebuilt<br> </li> <li> ANDROID_SDK_BASE must be set to the directory that contains the Android SDK. Example: ~/AndroidSDK<br> </li> </ul> <br> <h2> <span style=FONT-FAMILY:Verdana>Unpacking the NDK</span> </h2> Unpack the android_pndk.tar.gz into your working directory<br> <br> <div style=MARGIN-LEFT:40px> <span style="FONT-FAMILY:Courier New">tar -zxvf android_pndk.tar.gz</span><br> </div> <br> This will create a directory called pndk. It should contain a README.html file (this file) and the following directories: config, include, lib, and sample.<br> <br> Look in the "samples" directory for samples showing how to use the NDK.<br> <br> <br> </div> <br> </div> <br> </div> <br></body> </html>