<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2196598059546776678</id><updated>2024-08-30T16:27:52.645+09:00</updated><category term="Android"/><category term="個人輸入"/><title type='text'>鯖缶戯言［google版］</title><subtitle type='html'>サーバ管理者の戯言の名称を短くしましたのでよろしくお願いいたします。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-6685400934176396403</id><published>2011-07-31T23:17:00.004+09:00</published><updated>2011-07-31T23:35:19.849+09:00</updated><title type='text'>EclipseのResource is out of sync with the file system対応</title><content type='html'>特別な話では無いのですが、設定方法を忘れてしまってあたふたしたので備忘録として記載。&lt;br /&gt;&lt;br /&gt;ライブラリソース内デバッグとかを行う際、Resource is out of sync with the file systemのエラーがEclipseから出てしまい、その対処方法です。&lt;br /&gt;&lt;br /&gt;[Windows]-&gt;[Preferences]で設定ダイアログを表示します。&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1nW2k9WUBQow5e_OkDWpCVxmExgjkS4MEIKJUDG3N_D9Uo1C_Vik_GLMuiA5bzh7UDwXdFOHnZUtSoVDyG2qAQ_xx1fFtAxjgkYKnQXIgKQ-98nmIn07j_GCodtYDrJILRBPj4AlbfMU/s1600/Preferences+_021.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 312px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1nW2k9WUBQow5e_OkDWpCVxmExgjkS4MEIKJUDG3N_D9Uo1C_Vik_GLMuiA5bzh7UDwXdFOHnZUtSoVDyG2qAQ_xx1fFtAxjgkYKnQXIgKQ-98nmIn07j_GCodtYDrJILRBPj4AlbfMU/s320/Preferences+_021.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5635524563273885858&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;この画面通り、チェックを付与すればOKですね。&lt;br /&gt;&lt;br /&gt;※Eclipse 3.5系が中心で作業しているので、以降は違う箇所とかに変更されているかもしれません。(^^;</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/6685400934176396403/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/07/eclipseresource-is-out-of-sync-with.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/6685400934176396403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/6685400934176396403'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/07/eclipseresource-is-out-of-sync-with.html' title='EclipseのResource is out of sync with the file system対応'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1nW2k9WUBQow5e_OkDWpCVxmExgjkS4MEIKJUDG3N_D9Uo1C_Vik_GLMuiA5bzh7UDwXdFOHnZUtSoVDyG2qAQ_xx1fFtAxjgkYKnQXIgKQ-98nmIn07j_GCodtYDrJILRBPj4AlbfMU/s72-c/Preferences+_021.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-8169743629128491256</id><published>2011-05-24T01:11:00.001+09:00</published><updated>2011-05-24T01:18:24.361+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNIライブラリの利用＜その１＞</title><content type='html'>&lt;a href=&quot;http://srvhat09.blogspot.com/2011/05/jni.html&quot;&gt;Android JNIライブラリの作成&lt;/a&gt;で開発したライブラリプロジェクトを、そのままEclipseから利用する方法です。&lt;br /&gt;＜その１＞ではJNIを対象としていますが、利用方法はJavaプロジェクトも全く同一です。＜その２＞はJNI専用になります。&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;＜Android JNIライブラリ利用側＞&lt;/span&gt;&lt;ul&gt;&lt;li&gt;ライブラリプロジェクトが完成したら、今度は利用するプロジェクト側を用意します。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpVmHfK6BsZde3wuhmdvtHy-WmzUTd49nhE2o4jkG8llkQIql5iHd3Nu3Elr5l-RH735l99bkv6vvnuN03PBbEi6mOjUCyeCxU7pupgqt7duRRoGz01QTi9EiC_lpkPSllu5q2yZsBCM/s1600/New+Android+Project+_007.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 218px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpVmHfK6BsZde3wuhmdvtHy-WmzUTd49nhE2o4jkG8llkQIql5iHd3Nu3Elr5l-RH735l99bkv6vvnuN03PBbEi6mOjUCyeCxU7pupgqt7duRRoGz01QTi9EiC_lpkPSllu5q2yZsBCM/s320/New+Android+Project+_007.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603925099286944242&quot; /&gt;&lt;/a&gt;これは例ですが、特別なことはしていません。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;プロジェクトプロパティの[Android]にあるLibraryの[Add...]ボタンでAndroidライブラリを選択します。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzrZRCdAvmBOxt18bvBfvvWXZdLWlFqLDH5eZqglgDxIp_HUZpZvAmQKeHTJeSnPGaNuS-Itf5czRGiTV-LZtcZEQ6DL0AvGjL_yGU-kUZN3FFvIA-6V24WzTXgBPwoKb8yXlu-Ysz6s/s1600/Properties+for+TestLibApk+_008.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 303px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKzrZRCdAvmBOxt18bvBfvvWXZdLWlFqLDH5eZqglgDxIp_HUZpZvAmQKeHTJeSnPGaNuS-Itf5czRGiTV-LZtcZEQ6DL0AvGjL_yGU-kUZN3FFvIA-6V24WzTXgBPwoKb8yXlu-Ysz6s/s320/Properties+for+TestLibApk+_008.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603926128206535762&quot; /&gt;&lt;/a&gt;ライブラリ登録したプロジェクトが選択できるようになります。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhatKA9m8xj4UqOUCx1X1m6A_vGd3LiHmEvMOZb4Lrj2QrpeWf8k5tvEX17dyslpIrVwQLgOR6QjW3b3vdYUwnGbtHhwahDipqIIb6ku6RBhbEgHQsLysqThMztcDuFdeO-C9WYnTCp_Zo/s1600/Project+Selection+_009.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 293px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhatKA9m8xj4UqOUCx1X1m6A_vGd3LiHmEvMOZb4Lrj2QrpeWf8k5tvEX17dyslpIrVwQLgOR6QjW3b3vdYUwnGbtHhwahDipqIIb6ku6RBhbEgHQsLysqThMztcDuFdeO-C9WYnTCp_Zo/s320/Project+Selection+_009.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603926681377107426&quot; /&gt;&lt;/a&gt;設定完了した[Android]タブ&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR370-7bjf8fB7BAh7FtRzXC1yZdLjsaKaOcrPdP8pJbAKqAskww2-YsyfWHl0B4jvCH-t_lfDy_IYDNFirqGFN_Z3PJ7ugd3FHVToJB-eQcONUzra3gQX9H6t0B4NWOuFAZCxtO_2f8U/s1600/Properties+for+TestLibApk+_010.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 303px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR370-7bjf8fB7BAh7FtRzXC1yZdLjsaKaOcrPdP8pJbAKqAskww2-YsyfWHl0B4jvCH-t_lfDy_IYDNFirqGFN_Z3PJ7ugd3FHVToJB-eQcONUzra3gQX9H6t0B4NWOuFAZCxtO_2f8U/s320/Properties+for+TestLibApk+_010.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603930673464412578&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;同じくプロジェクトプロパティの[Java Build Path]のProjectsタブにある[Add...]ボタンを押下します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgmRp-qgPxwWfGO-T_X9EtI7TLa0qj-ByjFK_bh2csMmALVU5RvtLSOlx4YqO42igN4Bwz-BKHwj-81QI4uv7NxtuTW1P2mcafIC1O4RXhehTHxtaWoLjlBvbWn3Rj89fY5Ukbvdi42FU/s1600/Properties+for+TestLibApk+_012.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 266px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgmRp-qgPxwWfGO-T_X9EtI7TLa0qj-ByjFK_bh2csMmALVU5RvtLSOlx4YqO42igN4Bwz-BKHwj-81QI4uv7NxtuTW1P2mcafIC1O4RXhehTHxtaWoLjlBvbWn3Rj89fY5Ukbvdi42FU/s320/Properties+for+TestLibApk+_012.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609938358100663506&quot; /&gt;&lt;/a&gt;すると、Workspaceにある自分を除く全てのプロジェクトが選択できますが、JNIライブラリを選択します。この例では２つしか無いのでJNIライブラリだけ選択候補になっているように見えますが、間違えないでください。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidst02ttXwc8W1ZZFFglBDYTSDYaOM95jkm69l0rpVqwTCRYm008-4yvykljRspVytBJPU0R85le0XOvCXTni87mLYCrPwE-S8vTIakSuJ52lMjm8myGK2l52PBlXn88unZjLg__0bUKY/s1600/Required+Project+Selection+_013.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 238px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidst02ttXwc8W1ZZFFglBDYTSDYaOM95jkm69l0rpVqwTCRYm008-4yvykljRspVytBJPU0R85le0XOvCXTni87mLYCrPwE-S8vTIakSuJ52lMjm8myGK2l52PBlXn88unZjLg__0bUKY/s320/Required+Project+Selection+_013.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609940070543322802&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Librariesタブに移動し[Add Class Folder...]ボタンを押下します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHhkvv5bDMdcMR35cgIRvkS0E4U1Pq_5tfNxtpIRlMNhciZR4pObyu8uKE6O-AS9_KX-QtK6FJYGC7KSVUpeeMge_j6Tt5xMBCckiKzSmM2AtVz-Oqfy8LmWXJvFXhGbvgA2-UGGYtORg/s1600/Properties+for+TestLibApk+_014.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 266px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHhkvv5bDMdcMR35cgIRvkS0E4U1Pq_5tfNxtpIRlMNhciZR4pObyu8uKE6O-AS9_KX-QtK6FJYGC7KSVUpeeMge_j6Tt5xMBCckiKzSmM2AtVz-Oqfy8LmWXJvFXhGbvgA2-UGGYtORg/s320/Properties+for+TestLibApk+_014.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609940777979614322&quot; /&gt;&lt;/a&gt;ここで、ライブラリ側のJavaソースがあるsrcフォルダを選択します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigsdYJvldJsrwgpKijtWbUP35G1p39qeLW4iQoGLtYFvU9ZV4aNzmKTFKQtiCzXV_RvgXk85ojE3Nb7UUl4_YKuchcRxcnaoz7hhr7pW6VKPJgrbnZMgM7dR0BNagvuw4LkrV-aa9o_oE/s1600/Class+Folder+Selection+_015.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 278px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigsdYJvldJsrwgpKijtWbUP35G1p39qeLW4iQoGLtYFvU9ZV4aNzmKTFKQtiCzXV_RvgXk85ojE3Nb7UUl4_YKuchcRxcnaoz7hhr7pW6VKPJgrbnZMgM7dR0BNagvuw4LkrV-aa9o_oE/s320/Class+Folder+Selection+_015.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609941197905353170&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Order and Exportタブに移動し先程追加したソースのクラスフォルダにチェックを入れます。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUx_c9_5B-QRZIu0qG8U1ySUZtBtOREqkfcgJySMAWqifV4x1akWBMIOWYGZq5wIDGV1mZP2YMsubBPXzp-fXcNbPV8XlimXBuSi8jiSiDVs8Qq5niLeQaSKVDaksMo6XQ2FauYjET3mU/s1600/Properties+for+TestLibApk+_016.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 266px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUx_c9_5B-QRZIu0qG8U1ySUZtBtOREqkfcgJySMAWqifV4x1akWBMIOWYGZq5wIDGV1mZP2YMsubBPXzp-fXcNbPV8XlimXBuSi8jiSiDVs8Qq5niLeQaSKVDaksMo6XQ2FauYjET3mU/s320/Properties+for+TestLibApk+_016.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609941821141174674&quot; /&gt;&lt;/a&gt;一応これで準備完了です。後は好きにライブラリを利用したプログラムを開発すれば良いです。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ちなみに、Project Explorerで確認するとライブラリが追加されていることが分かると思います。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-_ey7hobION4_eXsSRBMmqxO5rctNvUz4rcu0yekeiS76j1frOTblUiwJQOQ7-NyH-2MFS4_ppUtTu_vDBaTo7nFu5bzOVGtHTdUxRBF9KYjBMN5vj4UCEtPhgJQjkP_Q4rmb-4pPg8s/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_017.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-_ey7hobION4_eXsSRBMmqxO5rctNvUz4rcu0yekeiS76j1frOTblUiwJQOQ7-NyH-2MFS4_ppUtTu_vDBaTo7nFu5bzOVGtHTdUxRBF9KYjBMN5vj4UCEtPhgJQjkP_Q4rmb-4pPg8s/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_017.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609942660100750146&quot; /&gt;&lt;/a&gt;ついでですが、説明しませんでしたがプロジェクトプロパティの[Java Build Path]にあるSourceタブは完了すると勝手にソースが追加されます。これを削除するとライブラリをコンパイルしませんので注意してください。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQUTll_wEP78FovzTO1GaPmviiMITcFUBXs4NzuLXj5tiKaMPI8HXO5psyXx1eD47WaF6HPOBDGCGfoXRav9NAsHnVs-7tL8Y17KFlUGjNJH2IRSoETTb-9mFRZ4vcGOQtb8CvhrE_I2E/s1600/Properties+for+TestLibApk+_018.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 272px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQUTll_wEP78FovzTO1GaPmviiMITcFUBXs4NzuLXj5tiKaMPI8HXO5psyXx1eD47WaF6HPOBDGCGfoXRav9NAsHnVs-7tL8Y17KFlUGjNJH2IRSoETTb-9mFRZ4vcGOQtb8CvhrE_I2E/s320/Properties+for+TestLibApk+_018.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5609943851208957954&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;設定のみなので簡単でしたよね。後はJava実装を行なって実行すれば良いです。&lt;br /&gt;ただ、初心者はJNIライブラリは利用側を実装するまでビルドしないことをお勧めします。というのも、ビルド結果がライブラリフォルダ内で行われてしまい、ライブラリ利用側のbinにコピーされない現象が発生しました。私が行なった対処方法は、binフォルダやgen、Libs、obj配下のディレクトリやファイルを削除することで対応できたように記憶しています。&lt;br /&gt;&lt;br /&gt;上記のJNIライブラリ利用は、ライブラリ開発者とアプリ開発者が同一の場合に利用できます。しかしながら、他人にバイナリを配布する際はどうするのか？&lt;br /&gt;これを＜その２＞に記載したいと思います。</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/8169743629128491256/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/05/jni_16.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/8169743629128491256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/8169743629128491256'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/05/jni_16.html' title='Android JNIライブラリの利用＜その１＞'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRpVmHfK6BsZde3wuhmdvtHy-WmzUTd49nhE2o4jkG8llkQIql5iHd3Nu3Elr5l-RH735l99bkv6vvnuN03PBbEi6mOjUCyeCxU7pupgqt7duRRoGz01QTi9EiC_lpkPSllu5q2yZsBCM/s72-c/New+Android+Project+_007.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-6502444802283725139</id><published>2011-05-17T01:53:00.003+09:00</published><updated>2011-05-17T02:13:43.445+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNI で C++ を利用する＜その２＞</title><content type='html'>単純なC++の場合には問題無いのだけれど、JNIフォルダの中に複数のフォルダを配置した階層構造とした場合に少々嵌ったので備忘録として記録。&lt;br /&gt;&lt;br /&gt;この図のようなJNIディレクトリ構造を持つJNIを開発すると仮定する。&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj10BIBsoBwsRRWpNEHbMGiiy_d9tjU9-I6PgK6sxvn3Ai-O0FtD5GQvuX2cHQOglnfhgm9dF2MvWN9i8AE9hst71jnM03aVe1hv8Nod4_nAP1h1KNQvOtnyDKjRTc73LvxvVwh1byjs-o/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_020.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 285px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj10BIBsoBwsRRWpNEHbMGiiy_d9tjU9-I6PgK6sxvn3Ai-O0FtD5GQvuX2cHQOglnfhgm9dF2MvWN9i8AE9hst71jnM03aVe1hv8Nod4_nAP1h1KNQvOtnyDKjRTc73LvxvVwh1byjs-o/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_020.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5607361434228677650&quot; /&gt;&lt;/a&gt;CソースとCPPソースが混在したとしても、Application.mkはJNI直下で無ければならない点に注意。次に、JNI直下では各ディレクトリ毎にAndroid.mkを配置するようにした場合（JNI直下でも良いがその場合には全て指定）には、次の一行をAndroid.mkに記述しておく。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;include $(call all-subdir-makefiles)&lt;/pre&gt;&lt;/span&gt;これに気がつくまでに、時間がかなり掛かってしまったので注意してください。</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/6502444802283725139/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/05/android-jni-c.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/6502444802283725139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/6502444802283725139'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/05/android-jni-c.html' title='Android JNI で C++ を利用する＜その２＞'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj10BIBsoBwsRRWpNEHbMGiiy_d9tjU9-I6PgK6sxvn3Ai-O0FtD5GQvuX2cHQOglnfhgm9dF2MvWN9i8AE9hst71jnM03aVe1hv8Nod4_nAP1h1KNQvOtnyDKjRTc73LvxvVwh1byjs-o/s72-c/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_020.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-689641050156869453</id><published>2011-05-16T22:16:00.002+09:00</published><updated>2011-05-16T22:21:06.003+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNIライブラリの作成</title><content type='html'>Androidの開発を行なっていく上で、避けて通れないのがライブラリ化でしょう。開発していく中で再利用ソースが増えてくるので、他プロジェクトでも利用したいって気持ちが増えます。&lt;br /&gt;かといって共用部分をコピー＆ペーストする方法もありますが効率的ではありませんし、なによりプロっぽくありません。ご存知だとは思いますが、アマチュアとプロフェッショナルの決定的な違いは仕事でお金を貰えるか否かになります。作業の効率化もそうですが、メンテナンスも常に意識し他者に継承出来ることが重要視されます。&lt;br /&gt;&lt;br /&gt;＃企業では同じ仕事を延々に同一担当者が行うことは出来ませんし。&lt;br /&gt;＃簡単なメンテナンスとかは、徐々に後輩に移行させる会社を想定しています。&lt;br /&gt;&lt;br /&gt;御託はこの辺で終わりにして、本題のJNIライブラリ作成です。&lt;br /&gt;実はAndroidのJavaライブラリ作成方法と全く同じで作成出来ましたってことで終わりにしても良いのですが、それだとやや酷いので、私の作業過程とちょっとしたトラブルの備忘録って趣旨で記載します。&lt;br /&gt;&lt;br /&gt;この記事ではAndroid JNIをEclipse CDTの設定方法等は説明しません。それは、以前の記事である&lt;a href=&quot;http://srvhat09.blogspot.com/2011/02/android-jni-eclipse-cdt-ubuntu-1010.html&quot;&gt;Android JNI を Eclipse CDT でプロジェクト統合する＜ubuntu 10.10編 その２＞&lt;/a&gt;を見てください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;＜Android JNIライブラリ作成＞&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Androidプロジェクトを生成します。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmrgcN7G4n_DQ-TgQg5doKk04omkgzXXNnLPq1qDULmvBr97xiaHIHIjzFEbAh1lG-5znaKRdaostWNIwZN3v7x5IQlwCK3vrSCtrGEmtRE_E5_ckOWfcgtxyQe6rTEJ4wn4wPx8hwl94/s1600/New+Android+Project+_002.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 218px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmrgcN7G4n_DQ-TgQg5doKk04omkgzXXNnLPq1qDULmvBr97xiaHIHIjzFEbAh1lG-5znaKRdaostWNIwZN3v7x5IQlwCK3vrSCtrGEmtRE_E5_ckOWfcgtxyQe6rTEJ4wn4wPx8hwl94/s320/New+Android+Project+_002.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603894286743682402&quot; /&gt;&lt;/a&gt;この図のように、ライブラリ専用プロジェクトにActivityが不要な場合にはチェックを外しておきます。&lt;br /&gt;☆上図では誤ってパッケージ名をタイプミスしたため、実行エラーとなってちょっと焦りました。こういった配慮も必要ですね。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;不要なファイルを削除します。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip6ZahNu06CFwn1bQ8HUqyk5ypJNbg9G0gNkGAmZatrqlIFjTuLJ4hSm4cvCjMZh3sod_7KoOOhr1I00AKQp9Oks67zHy-OegIyrLf9cKH-_fe7_j7GEO3aO4wcy0LlItfmeVG39GWU8I/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_003.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip6ZahNu06CFwn1bQ8HUqyk5ypJNbg9G0gNkGAmZatrqlIFjTuLJ4hSm4cvCjMZh3sod_7KoOOhr1I00AKQp9Oks67zHy-OegIyrLf9cKH-_fe7_j7GEO3aO4wcy0LlItfmeVG39GWU8I/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_003.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603895692438865650&quot; /&gt;&lt;/a&gt;リソースファイルは自動的に作成されますが、特に必要無いので削除しています。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Android Manifestの修正を行ないます。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifn7Zep6lpp7swXiDGA2ewVN_DHco4TuiHgBSHH_W7MVxl700n11011i1U7GpqQ6b0SxugHbrX_jMr0f6xftKkQ6v8X92_fcSjOk2cmPLBYrB7Yak02lq33vK8IN3P9t14cTj0G4Mv6rk/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_004.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifn7Zep6lpp7swXiDGA2ewVN_DHco4TuiHgBSHH_W7MVxl700n11011i1U7GpqQ6b0SxugHbrX_jMr0f6xftKkQ6v8X92_fcSjOk2cmPLBYrB7Yak02lq33vK8IN3P9t14cTj0G4Mv6rk/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_004.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603896229458330658&quot; /&gt;&lt;/a&gt;&lt;br /&gt;図の通り、Define an・・・の箇所のチェックを外すことでアプリケーションタグが削除されます。ライブラリは外部から直接起動されない（組み込まれる）ので、必要がある場合には組み込み先側での指定になります。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;クラスファイルの作成を行ないます。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKDwL8bKi-kqG1zyX0UP7KH6AXeyVjT3GHA_bBxrtFogVsrpMLuUum98nU8RESJBTmown9d7uOwbJG-I9DSaJ8BpYiM9CVKjWmtgu_FrWVWHmSi5veLtrqlbd0s2WqInLAP2lwb6iWTuc/s1600/New+Java+Class+_005.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 291px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKDwL8bKi-kqG1zyX0UP7KH6AXeyVjT3GHA_bBxrtFogVsrpMLuUum98nU8RESJBTmown9d7uOwbJG-I9DSaJ8BpYiM9CVKjWmtgu_FrWVWHmSi5veLtrqlbd0s2WqInLAP2lwb6iWTuc/s320/New+Java+Class+_005.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603897734876242066&quot; /&gt;&lt;/a&gt;ここでは、JNIの呼出元となるJavaクラスとしてsamplelibクラスを生成しています。内容は以下の通りとしました。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;package jp.co.anaheim_eng.teslib;&lt;br /&gt;&lt;br /&gt;public class samplelib {&lt;br /&gt;&lt;br /&gt; static {&lt;br /&gt; // ライブラリロード&lt;br /&gt;  System.loadLibrary(&quot;testjni&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; // JNIのネイティブメソッド&lt;br /&gt;public native String GetStringJNI();&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;  * デフォルトコンストラクタ&lt;br /&gt;  */&lt;br /&gt; public samplelib() {&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * 単なる文字列をJNI経由で返却するファンクション&lt;br /&gt;  * @return&lt;br /&gt;  */&lt;br /&gt; public String getString() {&lt;br /&gt;  return GetStringJNI();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;この辺りで、前述リンク先の＜AndroidプロジェクトのC/C++プロジェクト化＞を終了しているものとします。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;プロジェクトプロパティの[Android]にある[Is Library]をチェックを入れます。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRHBzXtP0o0mdUocd1RFtSG3q-ZeJy6AVsAFkpggENf2fmdl9us771JGx9x5QNV2FXiiJThbl01abycSB2irfkRqYakQ5rkg1G3TfcQmHTep6noyGlr3rlStx_i3d49YyUVxkMRgKoKc/s1600/Properties+for+TestLibJni+_006.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 278px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRHBzXtP0o0mdUocd1RFtSG3q-ZeJy6AVsAFkpggENf2fmdl9us771JGx9x5QNV2FXiiJThbl01abycSB2irfkRqYakQ5rkg1G3TfcQmHTep6noyGlr3rlStx_i3d49YyUVxkMRgKoKc/s320/Properties+for+TestLibJni+_006.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5603899811322621986&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JNI側のプログラムは以下の通りとしました。&lt;br /&gt;ヘッダーファイル[jp_co_anaheim_eng_testlib_samplelib.h]&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;#include &amp;lt;jni.h&amp;gt;&lt;br /&gt;#ifndef _Included_jp_co_anaheim_eng_testlib_samplelib&lt;br /&gt;#define _Included_jp_co_anaheim_eng_testlib_samplelib&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* DEBUG パラメタ 0: Releaseビルド, 1: Debugビルド&lt;br /&gt;*/&lt;br /&gt;#define DEBUG 1&lt;br /&gt;&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;extern &quot;C&quot; {&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* Class:     Java_jp_co_anaheim_1eng_testlib_samplelib&lt;br /&gt;* Method:    GetString&lt;br /&gt;* Signature: ([II)Ljava/lang/String;&lt;br /&gt;*/&lt;br /&gt;JNIEXPORT jstring JNICALL Java_jp_co_anaheim_1eng_teslib_samplelib_GetStringJNI&lt;br /&gt;(JNIEnv *, jobject);&lt;br /&gt;&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;}&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#endif&lt;/pre&gt;&lt;/span&gt;cppファイル[TestJni.cpp]&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &quot;jp_co_anaheim_eng_testlib_samplelib.h&quot;&lt;br /&gt;#include &amp;lt;android/log.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;string&amp;gt;&lt;br /&gt;&lt;br /&gt;#if DEBUG&lt;br /&gt;#  define DebugLogInfo(...)  ((void)__android_log_print(ANDROID_LOG_INFO, &quot;TestJni LIB&quot;, __VA_ARGS__))&lt;br /&gt;#else&lt;br /&gt;#  define DebugLogInfo(...)  do{}while(0)&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;JNIEXPORT jstring JNICALL Java_jp_co_anaheim_1eng_teslib_samplelib_GetStringJNI&lt;br /&gt;(JNIEnv *env, jobject thiz)&lt;br /&gt;{&lt;br /&gt; std::string strRtn = &quot;Hello JNI Library&quot;;&lt;br /&gt; return env-&amp;gt;NewStringUTF(strRtn.c_str());&lt;br /&gt;}&lt;/pre&gt;&lt;/span&gt;[Android.mk]&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;LOCAL_PATH := $(call my-dir)&lt;br /&gt;&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;&lt;br /&gt;LOCAL_MODULE     := testjni&lt;br /&gt;LOCAL_SRC_FILES  := TestJni.cpp&lt;br /&gt;LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)&lt;br /&gt;LOCAL_LDLIBS     := -llog&lt;br /&gt;&lt;br /&gt;include $(BUILD_SHARED_LIBRARY)&lt;/pre&gt;&lt;/span&gt;[Application.mk]&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;APP_STL := stlport_static&lt;/pre&gt;&lt;/span&gt;これでJNIライブラリの準備は完了となります。次からはJNIライブラリをどのように利用するかについて記述します。&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/689641050156869453/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/05/jni.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/689641050156869453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/689641050156869453'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/05/jni.html' title='Android JNIライブラリの作成'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmrgcN7G4n_DQ-TgQg5doKk04omkgzXXNnLPq1qDULmvBr97xiaHIHIjzFEbAh1lG-5znaKRdaostWNIwZN3v7x5IQlwCK3vrSCtrGEmtRE_E5_ckOWfcgtxyQe6rTEJ4wn4wPx8hwl94/s72-c/New+Android+Project+_002.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-4280129646779413519</id><published>2011-05-04T10:41:00.010+09:00</published><updated>2011-05-04T16:38:02.040+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNI でのファイルの取扱と脆弱性</title><content type='html'>日本Androidの会 セキュリティ部で私が投稿した内容を纏めます。(^^;&lt;br /&gt;&lt;br /&gt;事の発端はSkypeの脆弱性が指摘された件は、SQLiteのパーミッションに問題があったことから始まっています。&lt;br /&gt;＃パーミッションが開放されたとしても暗号化されていればまだ良かったのですがね。&lt;br /&gt;&lt;br /&gt;「kaito」さんも指摘されていますように、一般的なAndroid APIを利用してファイルを作成する場合には、other権限で読み書きできるパーミッションが付与されることは無いからです。&lt;br /&gt;&lt;br /&gt;「kaito」さんの解析成果によりSkype同梱されている「libpcmhost.so」が問題であるとの推測されましたので、JNI側でファイルを作成するとどうなるかを調査しました。&lt;br /&gt;&lt;br /&gt;JNI側で一般的な入出力関数である「fopen」「open」の２つを調査しました。ファイルの中身は問題ではありませんので、単なるファイルをopenしcloseすることでファイルを生成させるというものです。ソースサンプルは以下の通り。&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;#include &amp;lt;jni.h&amp;gt;&lt;br /&gt;#include &amp;lt;android/log.h&amp;gt&lt;br /&gt;&lt;br /&gt;#define DEBUG 1&lt;br /&gt;#if DEBUG&lt;br /&gt;#  define DebugLogInfo(...)  ((void)__android_log_print(ANDROID_LOG_INFO, &quot;TestOpen&quot;, __VA_ARGS__))&lt;br /&gt;#else&lt;br /&gt;#  define DebugLogInfo(...)  do{}while(0)&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;JNIEXPORT jint JNICALL Java_jp_co_anaheim_1eng_MainActivity_testOpen (JNIEnv *env, jobject thiz)&lt;br /&gt;{&lt;br /&gt; //fopen関数は最も一般的&lt;br /&gt; FILE *fp;&lt;br /&gt; fp = fopen( &quot;/data/data/jp.co.anaheim_eng/testfile0.txt&quot;, &quot;w+&quot; );&lt;br /&gt; if( fp == NULL ) {&lt;br /&gt;  DebugLogInfo(&quot;File cannot open error.&quot;);&lt;br /&gt;  return 1;&lt;br /&gt; }&lt;br /&gt; fclose(fp);&lt;br /&gt;&lt;br /&gt; //open関数でパーミッションを指定しない状態で実行&lt;br /&gt; int fd;&lt;br /&gt; fd = open(&quot;/data/data/jp.co.anaheim_eng/testfile1.txt&quot;, O_CREAT | O_RDWR);&lt;br /&gt; if (fd == -1) {&lt;br /&gt;  DebugLogInfo(&quot;testfile1.txt File cannot open error.&quot;);&lt;br /&gt;  return 1;&lt;br /&gt; }&lt;br /&gt; close(fd);&lt;br /&gt;&lt;br /&gt; //ここは敢えてパーミッションを666に設定している&lt;br /&gt; fd = open(&quot;/data/data/jp.co.anaheim_eng/testfile2.txt&quot;, O_CREAT | O_RDWR, 0666);&lt;br /&gt; if (fd == -1) {&lt;br /&gt;  DebugLogInfo(&quot;testfile2.txt File cannot open error.&quot;);&lt;br /&gt;  return 1;&lt;br /&gt; }&lt;br /&gt; close(fd);&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;/android&gt;&lt;/jni.h&gt;&lt;/fcntl.h&gt;&lt;/stdio.h&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;このソースをJavaから呼び出して見た結果は以下の通り。&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHjwVmrzNKirFQVGrit_TJkza9OzMWrvhceauGjBzjHxzbtTVQYKQ4wCvc6V7xg2MvKq0zu8qnkebCo4hyphenhyphenDfaZ6qf8apTc0Y2IL2LomA4OZRSWf7usftCX3djvfmrDMpdS2TBZxJuicPQ/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_001.png&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 62px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHjwVmrzNKirFQVGrit_TJkza9OzMWrvhceauGjBzjHxzbtTVQYKQ4wCvc6V7xg2MvKq0zu8qnkebCo4hyphenhyphenDfaZ6qf8apTc0Y2IL2LomA4OZRSWf7usftCX3djvfmrDMpdS2TBZxJuicPQ/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_001.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5602675068998367042&quot; /&gt;&lt;/a&gt;&lt;br /&gt;エミュレータはこの結果になるが、ひょっとすれば実機なら変わるかも？ってことでAndroid 2.3.3搭載している開発標準端末であるNexus Sで実行してみた。結果は以下の通り。&lt;br /&gt;＃ちなみに私のNexus Sはroot化していませんので。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6qHZu194yz94ZZ-IyxqCh5h8AiQjXpAvdxo1-RTWNvUnIFpTeCMzgV67WjHH6LXW0clI2wXNZ3MtswTri1BycFKbltndO1j6nSiVcSOlVtZwgsvobyJQrhf87xODBxXBiPA0IJ3H6Unw/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_003.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 97px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6qHZu194yz94ZZ-IyxqCh5h8AiQjXpAvdxo1-RTWNvUnIFpTeCMzgV67WjHH6LXW0clI2wXNZ3MtswTri1BycFKbltndO1j6nSiVcSOlVtZwgsvobyJQrhf87xODBxXBiPA0IJ3H6Unw/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_003.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5602683495382634930&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Skypeの脆弱性はパーミッションを意識しない状態というか、AndroidのNativeで作成されるパーミッションを調査しなかっただけなのだろう。解決方法は？というと、open関数であれば適切なパーミッションを付与させれば良い。その他の場合には自分でパーミッションを設定させる命令を追加すれば良いだけ。&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;&lt;br /&gt; //パーミッションとして660に設定した&lt;br /&gt; if (chmod(&quot;/data/data/jp.co.anaheim_eng/testfile0.txt&quot;, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) != 0) {&lt;br /&gt;  DebugLogInfo(&quot;File cannot change chmod.&quot;);&lt;br /&gt;  return 1;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;この処理を追加して実行した結果が以下の通りとなる。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv3uCcRvKilQnh32YEo-RlLVC6lueu04ma_nAX_tW3SLxhlQTBeE9LJAGjuaOUlQAkcX8d3gErpd3LomaAgMll1aSO6WzmAOhJYIm4qXy_3dBP5fx3tWh1QhyphenhyphenAl-W2jiky5YRKQ3xF8rQ/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_004.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 59px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv3uCcRvKilQnh32YEo-RlLVC6lueu04ma_nAX_tW3SLxhlQTBeE9LJAGjuaOUlQAkcX8d3gErpd3LomaAgMll1aSO6WzmAOhJYIm4qXy_3dBP5fx3tWh1QhyphenhyphenAl-W2jiky5YRKQ3xF8rQ/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_004.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5602679590343324658&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;＜雑感＞&lt;br /&gt;Android NativeであるNDKを利用してファイル操作を行った場合には特にパーミッションを注意しなければならいと思う。因みにUbuntu上でfopenを利用した場合のパーミッションは644になっているので、666のAndroidはややどうかなぁって気はする。&lt;br /&gt;デフォルトパーミッションはJavaと同様に660にして欲しい気もするのだが、最低でも664 or 644になっていることを望みます。&lt;br /&gt;&lt;br /&gt;root化された端末では、パーミッションによるセキュリティ担保が出来るということは期待しない方が良いから暗号化等の配慮が必要にはなる。であるとするとJNIで666となるパーミッションの標準もこのままでも良いのかも？って気がしないでもないなぁ。(^^;</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/4280129646779413519/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/05/android-jni.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/4280129646779413519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/4280129646779413519'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/05/android-jni.html' title='Android JNI でのファイルの取扱と脆弱性'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHjwVmrzNKirFQVGrit_TJkza9OzMWrvhceauGjBzjHxzbtTVQYKQ4wCvc6V7xg2MvKq0zu8qnkebCo4hyphenhyphenDfaZ6qf8apTc0Y2IL2LomA4OZRSWf7usftCX3djvfmrDMpdS2TBZxJuicPQ/s72-c/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_001.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-7170632862755096623</id><published>2011-03-17T14:48:00.004+09:00</published><updated>2011-03-17T18:12:47.653+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Ubuntu 10.10 に Nexus S と XOOM を接続する</title><content type='html'>東北関東大震災(東北地方太平洋沖地震)で被害にあわれた皆様方に心よりお見舞いを申し上げるとともに犠牲になられた方々、遺族の皆様にはお悔やみを申し上げます。&lt;br /&gt;&lt;br /&gt;私も東京にいますので、地震発生直後はいつもの地震だなって思っていましたが次第に大きくなり本棚等が倒れそうになり必死で抑えるのが精一杯でした。最初はTwitterで地震コメントを呟いたのですが、途中からは本棚を抑えながらも大量の地震コメントが流れてきました。&lt;br /&gt;この時こそネットワークで繋がっているっていいなぁって思った改めて実感しました。&lt;br /&gt;&lt;br /&gt;まだまだ被害の全容や刻々と変化する情勢に予断を許せる状況ではありませんが、災害に悲観しているだけでは復興の役にも立たないのでポジティブに仕事をすることで、僅かながら社会貢献することにしたいと思っています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;＜Ubuntu 10.10 on VMWare Workstation＞&lt;br /&gt;私の環境はUbuntu 10.10をWindows 7 Pro 64bitのVMWare Workstationで稼働させています。この環境にNexux Sを接続します。とはいえ、普通に接続すれば問題ないのですが、物忘れが多い私の備忘録として記載します。&lt;br /&gt;&lt;br /&gt;１）環境の準備&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 10.10&lt;/li&gt;&lt;li&gt;Nexus S&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;　これだけなんですが、VMWare WorkstationはWindows 7 64bitで稼働させています。VMWare Playerでも同様に稼働できると思います。Nexus Sを例にしていますが、取り敢えずAndroid端末ならなんでも良いです。&lt;br /&gt;　Android端末はUSBデバッグをONにしておきましょう。（笑&lt;br /&gt;&lt;br /&gt;２）情報収集&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 10.10上のAndroid端末情報を取得する。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ sudo lsusb&lt;br /&gt;Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;Bus 001 Device 004: ID 18d1:4e22 Google Inc.&lt;br /&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;/pre&gt;&lt;/span&gt;この結果からIDの隣である18d1がUSB Vendor IDになります。隣にある4e22は何だ？ってことになると思います。分かり難いですよね。詳しく見るには以下のコマンドを入力すると分かります。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ sudo udevadm info --query=all --name=/dev/bus/usb/001/004&lt;br /&gt;P: /devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1&lt;br /&gt;N: bus/usb/001/004&lt;br /&gt;S: char/189:3&lt;br /&gt;E: UDEV_LOG=3&lt;br /&gt;E: DEVPATH=/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1&lt;br /&gt;E: SUBSYSTEM=usb&lt;br /&gt;E: DEVNAME=bus/usb/001/004&lt;br /&gt;E: ID_VENDOR=Samsung&lt;br /&gt;E: ID_VENDOR_ENC=Samsung&lt;br /&gt;E: ID_VENDOR_ID=18d1&lt;br /&gt;E: ID_MODEL=Nexus_S&lt;br /&gt;E: ID_MODEL_ENC=Nexus\x20S&lt;br /&gt;E: ID_MODEL_ID=4e22&lt;br /&gt;E: ID_REVISION=0227&lt;br /&gt;E: ID_SERIAL=Samsung_Nexus_S_xxxxxxxxxxxxxxxx&lt;br /&gt;E: ID_SERIAL_SHORT=xxxxxxxxxxxxxxxx&lt;br /&gt;E: ID_BUS=usb&lt;br /&gt;E: ID_USB_INTERFACES=:080650:ff4201:&lt;br /&gt;E: ID_MEDIA_PLAYER=google_nexus-s&lt;br /&gt;E: MAJOR=189&lt;br /&gt;E: MINOR=3&lt;br /&gt;E: DEVTYPE=usb_device&lt;br /&gt;E: DRIVER=usb&lt;br /&gt;E: PRODUCT=18d1/4e22/227&lt;br /&gt;E: TYPE=0/0/0&lt;br /&gt;E: BUSNUM=001&lt;br /&gt;E: DEVNUM=004&lt;br /&gt;E: DEVLINKS=/dev/char/189:3&lt;/pre&gt;&lt;/span&gt;ID_MODELにNexus Sを記載されていますし、ID_VENDOR_IDには先の値が入っています。（x16桁は端末シリアル番号です。）&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;３）udevのルール編集と&lt;br /&gt;&lt;ul&gt;&lt;li&gt;51-android.rulesを新規で作成します。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ sudo vi /etc/udev/rules.d/51-android.rules&lt;br /&gt;SUBSYSTEM==&quot;usb&quot;, ATTRS{idVendor}==&quot;18d1&quot;, OWNER=&quot;ユーザ名&quot;, GROUP=&quot;ユーザ名&quot;&lt;/pre&gt;&lt;/span&gt;上記の&quot;18d1&quot;がID_VENDOR_IDになります。Android機器が異なる場合にはベンダ毎に変わります。Nexusシリーズの場合、Googleが製造していないのでNexus Sの場合にはサムソンになるのですが、&lt;a href=&quot;http://developer.android.com/guide/developing/device.html&quot;&gt;サムソンは&quot;04e8&quot;&lt;/a&gt;なので別IDを利用していることになります。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;udevの再起動&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ sudo restart udev&lt;/pre&gt;&lt;/span&gt;これで設定自体は完了しています。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;adbの再起動&lt;br /&gt;ここで、一旦Android端末をUSBから接続を外し、再度接続し直します。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ adb kill-server&lt;br /&gt;$ adb start-server&lt;br /&gt;$ adb devices&lt;br /&gt;List of devices attached&lt;br /&gt;emulator-5554 device&lt;br /&gt;端末シリアル番号 device&lt;/pre&gt;&lt;/span&gt;これで完了です。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;＜追記＞&lt;br /&gt;2月下旬に発注していたMotorola XOOMが2011/3/15に到着しました。レポートは後日としますが、Windows 7 64bit上でVMWare Workstationで稼働していますUbuntu 10.10でNexus S同様に接続しました。&lt;br /&gt;上記ど同様にlsusbコマンドで調査し下記設定で問題なく動作しています。&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ sudo vi /etc/udev/rules.d/51-android.rules&lt;br /&gt;SUBSYSTEM==&quot;usb&quot;, ATTRS{idVendor}==&quot;22b8&quot;, OWNER=&quot;ユーザ名&quot;, GROUP=&quot;ユーザ名&quot;&lt;/pre&gt;&lt;/span&gt;Eclipse上のDDMSから画面キャプチャも問題なく出来るのですが、速度が遅いので&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;$ adb shell screencap -p /mnt/sdcard/capture.jpg&lt;br /&gt;$ adb pull /mnt/sdcard/capture.jpg&lt;/pre&gt;&lt;/span&gt;で行う方がかなり速く取得できました。コマンド操作が面倒な方は通常通りで良いですが。（笑）&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixKTWf4ur9kZcpK1UqkUAUY7ExZnnK0zGZaf0GaZA5Bzzh1WjSs1VdAioOzdH57duyJExIWwugrnzA1yWgq8XTUQzdE5J0Y6RcW6aBquhOrZhGklwAN3n_K4m1H5GI9EuahMhc1QAHn9E/s1600/capture.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 320px; height: 200px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixKTWf4ur9kZcpK1UqkUAUY7ExZnnK0zGZaf0GaZA5Bzzh1WjSs1VdAioOzdH57duyJExIWwugrnzA1yWgq8XTUQzdE5J0Y6RcW6aBquhOrZhGklwAN3n_K4m1H5GI9EuahMhc1QAHn9E/s320/capture.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5584921347135806690&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/7170632862755096623/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/03/ubuntu-1010-nexus-s-xoom.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/7170632862755096623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/7170632862755096623'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/03/ubuntu-1010-nexus-s-xoom.html' title='Ubuntu 10.10 に Nexus S と XOOM を接続する'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixKTWf4ur9kZcpK1UqkUAUY7ExZnnK0zGZaf0GaZA5Bzzh1WjSs1VdAioOzdH57duyJExIWwugrnzA1yWgq8XTUQzdE5J0Y6RcW6aBquhOrZhGklwAN3n_K4m1H5GI9EuahMhc1QAHn9E/s72-c/capture.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-5244714445817911456</id><published>2011-03-10T00:54:00.003+09:00</published><updated>2011-03-10T01:46:41.252+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNI で C++ を利用する</title><content type='html'>Android JNIでって話だとC言語サンプルはNDKにも付いてくるのだけど、C++となると情報が結構少ないので、備忘録として記載。&lt;br /&gt;&lt;br /&gt;基本的に拡張子をcppにすることでコンパイルすることは出来ます。私のC++での開発経験はVisual C++(今はVisual Studioですよね)ではほとんど無い経験がありません。Borland Delphiを1.0から開発していたことが長かったので、C++はBorland C++ Builderだったのです。&lt;br /&gt;＃昨年はC++ Builderの講師の仕事もしていましたので・・・&lt;br /&gt;&lt;br /&gt;何故こんな話をしているかというと、C++でclass定義というと「.h」にはクラス定義のみで、コンストラクタやデストラクタ、各メソッドは「.cpp」ファイルに記述していました。&lt;br /&gt;＃というか、勝手にテンプレートでそのように作られるんですね。&lt;br /&gt;&lt;br /&gt;兎も角、「.h」「.cpp」のソースファイルを用意します。コンパイルするためには「Android.mk」を作成します。およそ以下のような感じになります。&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;LOCAL_PATH:= $(call my-dir)&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;LOCAL_MODULE := 「JNIライブラリ名」&lt;br /&gt;LOCAL_SRC_FILES := $(call all-java-files-under, src)&lt;br /&gt;LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)&lt;br /&gt;include $(BUILD_SHARED_LIBRARY)&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;ヘッダーファイルが無い場合には良いのですが、定義する場合には「LOCAL_C_INCLUDES」を記述しなければなりません。&lt;br /&gt;Android.mkファイルの各パラメタの詳細については、&lt;a href=&quot;http://www.atmarkit.co.jp/fsmart/articles/android15/android15_3.html&quot;&gt;Android NDKでJNIを使用してアプリを高速化するには3/3&lt;/a&gt;を参照してください。&lt;br /&gt;&lt;br /&gt;とまぁ、これで普通は終わりなのですが、Android NDK r4以降でC++特有のSTL(標準テンプレートライブラリ)が利用できるようになりました。とは言っても、βとのことなのですが。STLが利用できるようになると、なにかと便利になるのでこれを利用しないでC++を利用する価値はありません。&lt;br /&gt;手元にNDK r4が無いので分かりませんがr5以降（r5bも含む）には2つのSTLが同梱されています。ひとつはGNU libstdc++ STLとSTLportです。どちらが良いかは各自の判断に任せるとして、利用方法は以下の通り。&lt;br /&gt;「Application.mk」を作成します。&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols&quot;&gt;APP_STL := stlport_static&lt;br /&gt;#APP_STL := gnustl_static&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;2行目をコメント化（#の付いた行）しているので、この場合にはSTLportを静的ライブラリ組み込みしてコンパイルします。たったこの一行で終わりです。&lt;br /&gt;サイト検索すると、過去のNDKではSTLportを実行するためにソースをダウンロードしてコンパイルしてって作業が必要だったそうなのですが、現在はこんなに簡単になっています。&lt;br /&gt;&lt;br /&gt;コンパイルは良いけど、ソースを記述する際にSTLportのインクルードヘッダーファイルは何処にあるのかって話になる。場所は「android-ndk-r5b/sources/cxx-stl/stlport/stlport」がヘッダーになります。&lt;br /&gt;Eclipseでコーディングする際には、プロジェクトプロパティの「C/C++ General」-&gt;「Path and Symbols」-&gt;「Includes」のC++に追加することになります。&lt;br /&gt;&lt;br /&gt;因みにgnu libstdc++を利用する際は「android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/include」ですね。</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/5244714445817911456/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/03/android-jni-c.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/5244714445817911456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/5244714445817911456'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/03/android-jni-c.html' title='Android JNI で C++ を利用する'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-6877844609311782559</id><published>2011-03-08T15:33:00.003+09:00</published><updated>2011-03-08T15:55:23.877+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="個人輸入"/><title type='text'>Motorola XOOM　＜途中経過＞</title><content type='html'>Amazon.comのシステムを利用しているMotorola STOREですが、Standard Shippingを選択すると随分待たされてしまいました。&lt;br /&gt;&lt;br /&gt;日本時間の2月26日午前中に予約を入れ、その時点での配達完了日程は3/3～3/8に。まぁStandard Shippingだとそんなものかなぁと思っていました。すると、夕刻には既に配達へのステータス変更になったので予定より早く到着するものと期待。&lt;br /&gt;&lt;br /&gt;結果的にトラッキング番号は発行されましたが、到着前日で本日(3/8)に転送業者に到着しました。転送業者の検品でも問題がありませんでしたので無事、米国内は輸送されました。（笑）&lt;br /&gt;&lt;br /&gt;日本に到着する予定はまだ不明ですが、来週末までには手元に届くものと思っています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;余談ですが、以下の取引経験からMotorola STOREも同じかなと推測したことが、思わぬ不安を招いたことになりました。&lt;br /&gt;&lt;br /&gt;＜私のAmazon.com取引経験＞&lt;br /&gt;Amazon.comでDVDとかを発注した場合ですが、2008年ぐらいまではStandardShippingを選択していても、予定（およそ2週間後～1ヶ月）よりも圧倒的に早く到着していました。&lt;br /&gt;特に、在庫があれば発注からおよそ10日程度で手元に届いていたし、Standard Shippingでもトラッキングナンバーが発行されていました。&lt;br /&gt;2010年ぐらいからAmazon.comの輸送が変更となり、国際輸送でのStandard Shippingではトラッキングナンバーは発行されなくなりました。&lt;br /&gt;もちろん、輸送費用が高いオプションを選択すればこの限りではありません。&lt;br /&gt;&lt;br /&gt;輸送日程も2010年からは10日程度から20日程度まで延びるので、確かに高価な輸送方法との差別化には成功しているようなのです。&lt;br /&gt;&lt;br /&gt;2006年から利用していた私としては、うーん？って感じなのですが、Motorola STOREでも有効であることを今回体験しましたので、Amazon.comを利用したショップサイトでもStandard Shipping選択は到着日程が1ヶ月程度の余裕がある場合に限らないと、精神衛生上あまりよろしくないなぁと。&lt;br /&gt;&lt;br /&gt;とはいえ、楽しい個人輸入ライフは辞められそうにありませんね。</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/6877844609311782559/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/03/motorola-xoom.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/6877844609311782559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/6877844609311782559'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/03/motorola-xoom.html' title='Motorola XOOM　＜途中経過＞'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-8387074484426958408</id><published>2011-02-28T23:01:00.004+09:00</published><updated>2011-03-08T15:55:43.201+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="個人輸入"/><title type='text'>Motorola XOOMを発注</title><content type='html'>TwitterのTLで@l_b__さんがMotorola XOOMを発注したとの内容を見て、思わず私もポチってしまいました。（笑）&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.store.motorola.com/&quot;&gt;Motorola STORE&lt;/a&gt;から発注を行いました。Android 3.0 (Honeycomb)搭載のXOOMですが、Bestbuyでは店頭のみの販売で2/24から開始しています。そもそも、Verizon Wirelessの端末は基本的にSIM形式では無くauと似た周波数ですがauとは若干異なるため、日本に輸入してもそのままでは利用することは出来ません。&lt;br /&gt;&lt;br /&gt;＃米国の通信業者では、AT&amp;amp;TまたはT-MobileならSIMをdocomo製・SBM製にすると動作する可能性があります。&lt;br /&gt;&lt;br /&gt;今日の発表でauがMotorola XOOM WiFi版を販売することになったので、一般の人はこれを待って購入するのがベストというかこれしかありません。私の場合には、開発用テスト機と展示会デモ機としての役目もあり、どうしても機種を数多く購入するために○年縛りになることは避ける必要があるので海外端末に流れる傾向があります。&lt;br /&gt;&lt;br /&gt;前置きは置いておいて、Motorola STOREですがAmazon.comが運営する販売サイトに載った独自サイトとして営業していました。この便利な点は、Amazon.comのアカウントがあれば同じまま利用できる点。配送も恐らくはAmazon.comを利用しているものと思われます。&lt;br /&gt;&lt;br /&gt;発注を行うと、hostedbyamazon.comドメイン（amazon.comが取得したドメイン）から送信されるので、安心感もあります。ただ、海外から個人輸入する場合に関税が必要なものはAmazon.comは直接発送を行いません。&lt;br /&gt;私の場合には、スピアネットさんを利用して転送していますが、オレゴン州にある転送サービスを利用すると州税が$0なので少しでも安価にすることが出来ます。今回、私の支払ったCA州税は$81.9です。&lt;br /&gt;＃オレゴン州はカリフォルニア州より北なので、輸送時間がやや長いです。金より時間を選択しています。（笑）&lt;br /&gt;&lt;br /&gt;今回購入したのは、XOOM本体とPortfolio Case for MOTOROLA XOOMです。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://ecx.images-amazon.com/images/I/21AoWHFhFVL._SX220_.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 220px; height: 195px;&quot; src=&quot;http://ecx.images-amazon.com/images/I/21AoWHFhFVL._SX220_.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ところで、関税が不要なものとしては、CD,DVD,Blu-rayなどのコンテンツ、光学機器、化粧品などです。詳しくはジェトロのサイトでって今探すと今年の1月で個人輸入のコンテンツが閉鎖していました。orz&lt;br /&gt;個人輸入の場合には一般的に10万以下の少額輸入貨物になるので、税関サイトの&lt;a href=&quot;http://www.customs.go.jp/tsukan/kanizeiritsu.htm&quot;&gt;少額輸入貨物の簡易税率&lt;/a&gt;が参考になります。&lt;br /&gt;&lt;br /&gt;私はAmazon.comでBlu-ray版の&lt;a href=&quot;http://www.amazon.com/Evangelion-1-11-You-Alone-Blu-ray/dp/B0030ZOYHC/ref=pd_bxgy_d_text_b&quot;&gt;エヴァンゲリヲン新劇場版　序1.11&lt;/a&gt;を購入しました。（笑）　なにせ、価格は$15.49（私が購入した価格は$18.99でした）です。&lt;a href=&quot;http://www.amazon.com/gp/product/B004EC5IUW/ref=s9_newr_gw_ir01?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=17DJAJ7H43B966GYGZZB&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=470938631&amp;amp;pf_rd_i=507846&quot;&gt;2.22&lt;/a&gt;が$22.99ですね。Blu-rayはアメリカと日本は同じリージョンコードなので便利です。&lt;br /&gt;＃2.22は日本で購入しました。なにせ早く手に入れたかったので。（汗&lt;br /&gt;&lt;br /&gt;衣類とかでは、革製だと関税が掛かりますがそれ以外だと概ね関税は掛からないので輸出してくれるところが多いです。靴も関税が掛かるので基本的にはショップから日本へ直送することは無理です。&lt;br /&gt;例えば、米国から日本へ製品を輸出する場合には、税関手続きが必要となり書類を作成しなければなりません。この書類を作成し輸送してくれる代行業が転送サービスと言われるものです。&lt;br /&gt;&lt;br /&gt;個人輸入でのトラブルもつきものです。国民生活センターに&lt;a href=&quot;http://www.kokusen.go.jp/news/data/n-20090205_2.html&quot;&gt;解決困難な個人輸入代行に関するトラブル&lt;/a&gt;が記載されています。全てが個人責任ですので、物が足りないとか違うとか、最悪途中で盗まれて箱しか無いなんてこともあります。&lt;br /&gt;因みに、Nexus Sを発注された方で&lt;a href=&quot;http://yamashita.dyndns.org/blog/theft-my-nexus-s/&quot;&gt;盗難にあったBlog&lt;/a&gt;があります。最終的には保証で新しい製品が到着したようですが、人気商品（iPadとかも輸送中の盗難事件がありました）は注意した方が良いです。&lt;br /&gt;&lt;br /&gt;私は運良くいままでは何事も無く何度も輸入していますが、勧める訳ではありませんので独力でショップを探して発注することで、発注程度の英語力は身に付けて頂けばと思います。個人的にはAmazon.comぐらいで発注するのが割と安全性が高いとは思います。が、間違った製品とかは全て英語でのやり取りになることは覚悟してくださいね。</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/8387074484426958408/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/02/motorola-xoom.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/8387074484426958408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/8387074484426958408'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/02/motorola-xoom.html' title='Motorola XOOMを発注'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-3669600955144132828</id><published>2011-02-19T21:59:00.003+09:00</published><updated>2011-02-19T22:20:24.835+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Windows XPでAndroid JNIをやってみたが、、、</title><content type='html'>結果からいうと、現段階では上手く動作していません。&lt;br /&gt;&lt;br /&gt;どうも、Windows版のEclipse 3.6.1ですがコンソールが正しく受け付けてくれないことが原因で、ndk-buildコマンドへ辿りつけない。仕方が無いので、.batファイルで迂回を試みるも撃沈。.batファイルでcygwinのbashをログイン起動し、パイプでndk-buildを起動させようとしてもダメ。&lt;br /&gt;&lt;br /&gt;.batファイル中に記述したパス名（/cygdrive/c/...）を受け付けないようだ。&lt;br /&gt;&lt;br /&gt;ってことで、いろいろ実験してみたがWindows環境ではダメっぽい。Macは基本がUnixなので恐らくは問題ないのではないかって思っています。成功された方がいましたら、コメント頂けると幸いです。&lt;br /&gt;&lt;br /&gt;Windows利用の方はVMWare PlayerでもダウンロードしてUbuntu 10.10をインストールする方法が良いかと。（笑）</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/3669600955144132828/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/02/windows-xpjni.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/3669600955144132828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/3669600955144132828'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/02/windows-xpjni.html' title='Windows XPでAndroid JNIをやってみたが、、、'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-853461183443681519</id><published>2011-02-18T20:15:00.001+09:00</published><updated>2011-02-19T22:20:44.161+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNI を Eclipse CDT でプロジェクト統合する＜ubuntu 10.10編 その２＞</title><content type='html'>前回の＜その１＞ではどこのサイトでもAndroid SDKをインストールする解説と同じですが、最後の方は面倒になったので端折ってしまいました。まぁ、あまり細かく書いても初心者さんが見ることはあまりないのでは？って思っていますので。&lt;br /&gt;&lt;br /&gt;私（だけなのかもしれません）が今まで作業した方法は、JNIのC部分を別プロジェクトとして作成し、コマンドラインからCコンパイル後、Javaに取り込んで連携させる方法でした。EclipseにCDTをインストールしても、エディタ程度にしか使えないのであまり意味が無いと思っていました。&lt;br /&gt;久しぶりにJNIを本気で取り組むことになり、何か方法が無いかと思い調査を繰り返してたどり着いたので、備忘録的に記載します。因みに参考としましたのが、&lt;a href=&quot;http://www.youtube.com/watch?v=IWGsirINUVc&quot;&gt;CDT Android&lt;/a&gt;というYouTube動画（英語）です。そのままではNDKバージョン、Eclipseバージョン等が異なり環境もCygwinのWindows環境と違います。&lt;br /&gt;&lt;br /&gt;では、今回はJNIのJava環境構築とEclipse CDT連携部分です。前回では環境変数として[ANDROID_NDK_ROOT]をexportしていますが、必須なのかの組み合わせテストまでは行っていないので、やや正確性に欠けるかもしれません。&lt;br /&gt;&lt;br /&gt;＃当初はexportしないで作業していましたが、設定ミス等がありどれがどれに影響したかまでは未調査です。スミマセン。&lt;br /&gt;＃まぁ個人的な備忘録のつもりですので。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;＜前提＞&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;当資料で利用するサンプルは、NDKに同梱されているHello_Jniです。格納されている場所はNDK展開ディレクトリを基本とし、[samples]-&gt;[hello-jni]が格納されています。&lt;/li&gt;&lt;li&gt;Ubuntu10.10のEclipseは日本語化していません。Ubuntu 10.04では日本語化を行ったのですが、面倒になったのと日本語化するとダメかも？っていう記述を見た記憶があるので、そのままにしています。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;＜Androidプロジェクト作成＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;最初は元となるAndroidプロジェクトを作成しなければ話になりません。メニューバーの[File]-&gt;[New]-&gt;[Other]を選択すると、下図の画面が表示されます。この中でAndroidProjectを選択します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEpQ-Nciwb1vvnhABttwy-ggDzopj6dpaGrsxpnL23Hl3za8mXd7JMn0qUC96PLPWntSBM_VZhxIYGsn7hn26dmKgNkmgC-0Vm8Gh9lETjZRMSZ1-SLvCSuhzgmu_wissZa9_hU-hJA3Y/s1600/New++++_001.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 261px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEpQ-Nciwb1vvnhABttwy-ggDzopj6dpaGrsxpnL23Hl3za8mXd7JMn0qUC96PLPWntSBM_VZhxIYGsn7hn26dmKgNkmgC-0Vm8Gh9lETjZRMSZ1-SLvCSuhzgmu_wissZa9_hU-hJA3Y/s320/New++++_001.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574895028843409554&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Androidプロジェクトの設定画面が表示されます。Javaのみならここで設定するだけなんですよねぇ。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFyjYaMauKz3vSjF7h5ZzjMVKwX_PW4dDyChUaRHRxGD76BSpSPebyQ_wO-2lvuUSXcO9TVABfYyQ0jgA8Hbzu1lzTi_2YHAxDY7oeII7KdSL4Cr7El6kM-tIy3VP_YylkwIvTg4ZFns8/s1600/New+Android+Project+_002.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 236px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFyjYaMauKz3vSjF7h5ZzjMVKwX_PW4dDyChUaRHRxGD76BSpSPebyQ_wO-2lvuUSXcO9TVABfYyQ0jgA8Hbzu1lzTi_2YHAxDY7oeII7KdSL4Cr7El6kM-tIy3VP_YylkwIvTg4ZFns8/s320/New+Android+Project+_002.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574895835737989874&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;今回はNDKサンプルプロジェクトを選択します。下図のように選択して[Finish]ボタンを押します。因みに下図ではTargetNameがAndroid 2.2としていますが、これは単に2.2以降しか開発しないつもりな私の設定です。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVGfnq_Q33bCZAnh6cUVyYL53QHZcyCprST2zpSKvGG7IcUkkTY1CzAA9Mq1zzqiZ0pbzpeBMU-AQetNwH8qmga_H8e-EzJk5w9P4O11CRXvGr2UqW4OSzr5N54Ei9EEyouXnllWMF4no/s1600/New+Android+Project+_003.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 236px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVGfnq_Q33bCZAnh6cUVyYL53QHZcyCprST2zpSKvGG7IcUkkTY1CzAA9Mq1zzqiZ0pbzpeBMU-AQetNwH8qmga_H8e-EzJk5w9P4O11CRXvGr2UqW4OSzr5N54Ei9EEyouXnllWMF4no/s320/New+Android+Project+_003.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574896251337156354&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;取り込みができれば下図のようにProjectExplorerに表示されます。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixvUsrnAajCG35QwlgEeC-CS99dEuRjLXd1YVloDE1cD5pL4IVy-S_5bB-ifp4NzCyhPQ6VvcweWLYjOPjRs3X1o8idaf_U8FitJx9rTyZQsaGlbNOb5jRA1h8z22EaGdR_q2yDyaj_2k/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_004.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixvUsrnAajCG35QwlgEeC-CS99dEuRjLXd1YVloDE1cD5pL4IVy-S_5bB-ifp4NzCyhPQ6VvcweWLYjOPjRs3X1o8idaf_U8FitJx9rTyZQsaGlbNOb5jRA1h8z22EaGdR_q2yDyaj_2k/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_004.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574897081746074818&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;この時点では、単にJavaプロジェクトを生成しただけです。Propertiesを見るとJavaの設定しか存在しません。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtdIAeRY4S0hpzYQXJB7oWCuF_MVj_Hn97LqX1H4_CeIwIlPPqXyPRVmU55uCVK16LN2b6BCHt-hQOUxxcD-8nEdTdudaY1hXoa80FHqxlGxAwIPoDR9TdPkMhd0OhiT3bJHU1743Z-Zo/s1600/Properties+for+HelloJni+_005.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 211px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtdIAeRY4S0hpzYQXJB7oWCuF_MVj_Hn97LqX1H4_CeIwIlPPqXyPRVmU55uCVK16LN2b6BCHt-hQOUxxcD-8nEdTdudaY1hXoa80FHqxlGxAwIPoDR9TdPkMhd0OhiT3bJHU1743Z-Zo/s320/Properties+for+HelloJni+_005.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574897909991985602&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;＜AndroidプロジェクトのC/C++プロジェクト化＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;作業対象のJavaプロジェクトを選択して右クリックします。下図のように[New]-&gt;[Other]を選択します。&lt;br /&gt;※このメニュー中にConvert to a C/C++ Projectを直接選択してもいいです。（笑）&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9kyL9c0QDdRPjr9_eTyd0_EhTzBntz8gTtvTp6-B18kD4QvXrRDJmfGYlahcWRLsRg7oadaG4GZ7QWEVI8A_IPZi_81mIxxpNtnkIdsSrW1aF4rxT3pWCSvpSQQlfmBjTx6fCQMj2tSA/s1600/%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2582%25B9%25E3%2583%259A%25E3%2583%25BC%25E3%2582%25B9+2_007.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 162px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9kyL9c0QDdRPjr9_eTyd0_EhTzBntz8gTtvTp6-B18kD4QvXrRDJmfGYlahcWRLsRg7oadaG4GZ7QWEVI8A_IPZi_81mIxxpNtnkIdsSrW1aF4rxT3pWCSvpSQQlfmBjTx6fCQMj2tSA/s320/%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2582%25B9%25E3%2583%259A%25E3%2583%25BC%25E3%2582%25B9+2_007.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574901294054777746&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;下図の画面中からConvert to a C/C++ Projectを選択し[Next]ボタンを押下。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV39SVrz0HMF3S83XU5CpSMw2AU54F1KVX5cPVbNR11LM6YomPXKg2sF6brniOx8pEgVzom_rqwWy0Q-9GWX2DdtLXvEZRIEbMBQFJCcPzCuSAQ-xJmmBU2sttjCLpa5ulGKJhnzUBVvM/s1600/New++++_008.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 261px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV39SVrz0HMF3S83XU5CpSMw2AU54F1KVX5cPVbNR11LM6YomPXKg2sF6brniOx8pEgVzom_rqwWy0Q-9GWX2DdtLXvEZRIEbMBQFJCcPzCuSAQ-xJmmBU2sttjCLpa5ulGKJhnzUBVvM/s320/New++++_008.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574901988447530818&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ここの設定画面では、HelloJNIがCで作成されているので、[C  Project]を選択しています。次に[Project type]では[Makefile project]を選択し[Toolchain]はそのまま[Other Toolchain]とします。これでC/C++ Project化は終了です。&lt;br /&gt;というか、この辺りの設定を自分で全て行うことで出来るって意味なんですよねぇ。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglSJr6GtQHZCC881p132DLh_t8kcp79n1aeRpUpzb6KJUlcs1OrHp-tr5Aaoa7a7MSnGvrqO58jgMZe50Hflzev3LDewQy9slxObhFmVdR6GdUaddEvR-iVGnF2cVbKq95fR5AZurQejs/s1600/Convert+C-C%252B%252B+Projects+_009.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 281px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglSJr6GtQHZCC881p132DLh_t8kcp79n1aeRpUpzb6KJUlcs1OrHp-tr5Aaoa7a7MSnGvrqO58jgMZe50Hflzev3LDewQy9slxObhFmVdR6GdUaddEvR-iVGnF2cVbKq95fR5AZurQejs/s320/Convert+C-C%252B%252B+Projects+_009.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574902396422956946&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;念のために、ProjectのPropertiesを見てみます。ちゃんとC/C++のカテゴリが追加されていますよね。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkyHwS7z1GqX-upiV8wdmvXfeqbKb6_5QK4DIhtiVBcKBOuyRZ54oyWAP_6TvDJuL6TZtcC6TtZ6QgsPzRrQPnSPgBH0TtHBYANde_D7GglWLM7kmXkVJ7Vkh9NeLFDM5kNbm-C9rfX84/s1600/Properties+for+HelloJni+_010.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 232px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkyHwS7z1GqX-upiV8wdmvXfeqbKb6_5QK4DIhtiVBcKBOuyRZ54oyWAP_6TvDJuL6TZtcC6TtZ6QgsPzRrQPnSPgBH0TtHBYANde_D7GglWLM7kmXkVJ7Vkh9NeLFDM5kNbm-C9rfX84/s320/Properties+for+HelloJni+_010.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574903659815599026&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;＜C/C++プロジェクトのソース設定＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cのビルドに必要なディレクトリを追加します。下図ではプロジェクト選択後、右クリックにて[New]-&gt;[Folder]を選択しています。作業し易い方法で構いません。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuffMnRk69onzYOzvJkg47zFeHQgogd-CKUhtaHBr6EEjsUX7gGwKwSOMcEB1K0Lm_pZER6Scz4dPeYz0EJsIhZH-lJ3PuQQHya-bryAolW4TKPks0vin87zZZrlgQoICBtfRfuaLn69M/s1600/%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2582%25B9%25E3%2583%259A%25E3%2583%25BC%25E3%2582%25B9+2_011.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 105px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuffMnRk69onzYOzvJkg47zFeHQgogd-CKUhtaHBr6EEjsUX7gGwKwSOMcEB1K0Lm_pZER6Scz4dPeYz0EJsIhZH-lJ3PuQQHya-bryAolW4TKPks0vin87zZZrlgQoICBtfRfuaLn69M/s320/%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2582%25B9%25E3%2583%259A%25E3%2583%25BC%25E3%2582%25B9+2_011.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574959834923303586&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;追加するディレクトリ名は[libs]と[obj]です。下図ではlibsを追加しようとしている状態です。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK2vJ35bmA27FRO_2Ejqj0DWdFElHHE4b5imzGW3bPc_prwX1ITh1pm_fzhkvsbTqSn3CPkZaAPcSfBF_erzjmSO7chRdp_aL2gF2W7qxNSUmsGk-DErHLk7X2q36gpcbC6S28yNURzzI/s1600/New+Folder+_012.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 316px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK2vJ35bmA27FRO_2Ejqj0DWdFElHHE4b5imzGW3bPc_prwX1ITh1pm_fzhkvsbTqSn3CPkZaAPcSfBF_erzjmSO7chRdp_aL2gF2W7qxNSUmsGk-DErHLk7X2q36gpcbC6S28yNURzzI/s320/New+Folder+_012.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574960464908200914&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNoOwMNxJs8EYBsUiPwDTSZ65ZCYZ_OHAOsHODU9Omk92Hmv0HqXEcg5gTycAUmk9Pw0CrMIT9Yv9aZLzUTnBuJk4o1kvrJLd6Xth1nICNqD53ofUfnlyGt1BGu9A2ACWHiSlYCR4OWuU/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_025.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 282px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNoOwMNxJs8EYBsUiPwDTSZ65ZCYZ_OHAOsHODU9Omk92Hmv0HqXEcg5gTycAUmk9Pw0CrMIT9Yv9aZLzUTnBuJk4o1kvrJLd6Xth1nICNqD53ofUfnlyGt1BGu9A2ACWHiSlYCR4OWuU/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_025.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574961357366246994&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;プロジェクトプロパティを変更します。まず最初はコンパイルを行うための[Include]を変更しなければなりません。標準ではUbuntuのgccで必要なファイルが自動設定されています。&lt;br /&gt;変更場所は、[C/C++ General]-&gt;[Paths and Synbols]で最初は[Includes]となります。&lt;/li&gt;&lt;li&gt;[Languages]の[Assembly][GNU C][GNU C++]に設定されている内容を全て削除を行います。Shiftキーで複数選択も出来ますが、それほど多く無いので簡単に出来ますね。今回はCのみなのでアセンブラやC++は変更しなくても良いのでしょうが、まぁ勢いです。（笑&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOOPy77QyzhGZO9JkR-tUAxA4zbGZqMgNG7HHahGlDTaRc3Toe0TcDEEBo8EVN67akk1SnKSZDbdMlU9EF-Wbt99SNbDOXWbPzZ5nDqRoN98NxcHLzzw7xAsRgwpnd9B_CSSYTmD8K0-U/s1600/Properties+for+HelloJni+_013.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOOPy77QyzhGZO9JkR-tUAxA4zbGZqMgNG7HHahGlDTaRc3Toe0TcDEEBo8EVN67akk1SnKSZDbdMlU9EF-Wbt99SNbDOXWbPzZ5nDqRoN98NxcHLzzw7xAsRgwpnd9B_CSSYTmD8K0-U/s320/Properties+for+HelloJni+_013.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574962314205075458&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;全てが空になったら、上記の[Add...]ボタンを押下します。ここで[File system...]ボタンを押下してディレクトリを選択します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxExmuy_ESTYBtPt8g2ADsBDGnmmgSJm_ROokfnwM6egFBxUNu_jAT9aTVSS8IQ7Vk_sz3MsKzg1r_ITJoI4-o7kX7lTk8rgU34wNMMAgsJzgMGzglf0Y2RQE4AReEmR_NsMPrpAGgO40/s1600/Add+directory+path+_016.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 173px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxExmuy_ESTYBtPt8g2ADsBDGnmmgSJm_ROokfnwM6egFBxUNu_jAT9aTVSS8IQ7Vk_sz3MsKzg1r_ITJoI4-o7kX7lTk8rgU34wNMMAgsJzgMGzglf0Y2RQE4AReEmR_NsMPrpAGgO40/s320/Add+directory+path+_016.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574965204591816546&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;NDKのIncludeファイルディレクトリを選択します。下図のように、NDKを展開したディレクトリの[platforms]-&gt;[ビルド選択したAndroid OSのAPI Level]-&gt;[arch-arm]-&gt;[usr]-&gt;[include]です。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5fLm53wsBNaZL_xN92tX_G_2BbEhUsRS_0GdnDjdVIUFuLpnyKcAG0QK3yNlsXWUp9iFfSzZrRK3d3cHgr5cvxt6m0MBMGw_vmbX6_yiJ1rdyYYFd3zr6gpqBPOU_x1d-hykexihnHBM/s1600/%25E3%2582%25BF%25E3%2582%25A4%25E3%2583%2588%25E3%2583%25AB%25E3%2581%25AE%25E7%2584%25A1%25E3%2581%2584%25E3%2582%25A6%25E3%2582%25A4%25E3%2583%25B3%25E3%2583%2589%25E3%2582%25A6_015.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 219px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5fLm53wsBNaZL_xN92tX_G_2BbEhUsRS_0GdnDjdVIUFuLpnyKcAG0QK3yNlsXWUp9iFfSzZrRK3d3cHgr5cvxt6m0MBMGw_vmbX6_yiJ1rdyYYFd3zr6gpqBPOU_x1d-hykexihnHBM/s320/%25E3%2582%25BF%25E3%2582%25A4%25E3%2583%2588%25E3%2583%25AB%25E3%2581%25AE%25E7%2584%25A1%25E3%2581%2584%25E3%2582%25A6%25E3%2582%25A4%25E3%2583%25B3%25E3%2583%2589%25E3%2582%25A6_015.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574964104723001666&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;選択終了すると以下のように、チェックボックスも選択して[OK]ボタンを押下しておきます。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJoPr8EzBZH9hSMSDkjQGcQ6i1I8UL0UqUAWNRR5eCzDOAgScJlDv9yJy8T1UTw9bQbH03XwwWtAnH60B4MX5Bi1lOL0tPxunbT5TdZIAJ8rap2XqHR18SY188GZGp06Y1g-Zu9-fQmLA/s1600/Add+directory+path+_017.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 173px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJoPr8EzBZH9hSMSDkjQGcQ6i1I8UL0UqUAWNRR5eCzDOAgScJlDv9yJy8T1UTw9bQbH03XwwWtAnH60B4MX5Bi1lOL0tPxunbT5TdZIAJ8rap2XqHR18SY188GZGp06Y1g-Zu9-fQmLA/s320/Add+directory+path+_017.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574965674383074034&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;次に[Source Location]の設定を変更します。初期はプロジェクト直下になっているので、本来の位置である[jni]フォルダにしなければなりません。空に出来ないので、[Add Folder...]ボタンでプロジェクト配下の[jni]フォルダを選択し、自動設定された[/HelloJni]を削除します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1HF5zVB-BC-i0QJb-O0Ru2jR4Ofkg5AiFG0RrJVOEnfJ4ht2r24ulU8g7aKI_WBinK56_dqVF0CX8Zke2Pj2vIuCWou1Xq10lHE-kuL9GykSx0P82fDPWT02wZ-OasxpIS524Rjsnm54/s1600/Properties+for+HelloJni+_018.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1HF5zVB-BC-i0QJb-O0Ru2jR4Ofkg5AiFG0RrJVOEnfJ4ht2r24ulU8g7aKI_WBinK56_dqVF0CX8Zke2Pj2vIuCWou1Xq10lHE-kuL9GykSx0P82fDPWT02wZ-OasxpIS524Rjsnm54/s320/Properties+for+HelloJni+_018.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574966221344075826&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;最後に[Output Location]です。ここでは、出力結果をどこにするのかを指定しておきます。ここでは、追加した２つのディレクトリである[libs][obj]を追加し、自動設定された[/HelloJni]を削除します。下図は完了した状態です。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_j__pBoRUMzmfmv8dWXRvcEc6KZQU4IuHZcGrsbJCnfpjsmF1BirgVxdvzKtMepzg6i63YwfKVOfXDnc4VUIvn_gIqeUv4Dh1idgtQ406NlZzSdHU0Y6WCm49NZCxVk_S6FuBWrbxidY/s1600/Properties+for+HelloJni+_024.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_j__pBoRUMzmfmv8dWXRvcEc6KZQU4IuHZcGrsbJCnfpjsmF1BirgVxdvzKtMepzg6i63YwfKVOfXDnc4VUIvn_gIqeUv4Dh1idgtQ406NlZzSdHU0Y6WCm49NZCxVk_S6FuBWrbxidY/s320/Properties+for+HelloJni+_024.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574968368768032946&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;変更箇所を適用させるために[Apply]ボタンを押します。するとインクルードパスを変更しているためにリビルドするかを聞いてきますが、ビルド設定が完了出来ていないので[No]にしています。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5jXSBZA0qbgKVz7lhsZ2A501zJPndG5bEt6wGJ2GAtLy31rYlyLBfVTbOqP5LqBHcSyH2MXRYaDRFBQEY8eTE-2BgN6BLRpsZNffUgP2LYkiB1H1Z0sIQLnCvulFB7FaXpTEZBvbWKaM/s1600/Paths+and+Symbols+_023.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 109px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5jXSBZA0qbgKVz7lhsZ2A501zJPndG5bEt6wGJ2GAtLy31rYlyLBfVTbOqP5LqBHcSyH2MXRYaDRFBQEY8eTE-2BgN6BLRpsZNffUgP2LYkiB1H1Z0sIQLnCvulFB7FaXpTEZBvbWKaM/s320/Paths+and+Symbols+_023.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574968701341963266&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ここまでで、ソースの設定は終了。次はビルド設定になります。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;＜C/C++プロジェクトのビルド設定＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;プロジェクトプロパティの[C/C++ Build]を変更します。プロパティを表示し下図のように[C/C++ Build]を表示。その中にある[Builder Settings]の[Use default Build Command]のチェックをオフにし、[Build command]にフルパスでNDKでのビルドコマンドである[ndk-build]を設定します。&lt;br /&gt;※フルパス以外ではコンパイルできませんので注意してください。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVp7JfW6S9OBfcIRHCJjuoh2BsfFxITA2xKiXVv5E6ogSaicrgKQxHiRvC-YpGjv7YrB46WYOgjf6uiU33XkQaSh3rm4qRc54yehpW8i9ePeiwz58EMu7ukkC-i2fGZUr86k4VkHIHHs/s1600/Properties+for+HelloJni+_026.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVp7JfW6S9OBfcIRHCJjuoh2BsfFxITA2xKiXVv5E6ogSaicrgKQxHiRvC-YpGjv7YrB46WYOgjf6uiU33XkQaSh3rm4qRc54yehpW8i9ePeiwz58EMu7ukkC-i2fGZUr86k4VkHIHHs/s320/Properties+for+HelloJni+_026.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575017888510237058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;振る舞いを変更します。下図のように、[Behaiviour]タブの[Buid(incremental build)]欄には、初期値として[all]が記述されていますが、ndk-buildのオプションである[-B]を入れます。[Clean]ですが、ndk-buildはclean動作が不安定との情報もあったのでチェックをオフにしました。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQWnKUX0xgZenoyhD6NCWkzuUUbnU-b90bPHEvxoP5kZW5Own5nqp3tpWfIZvy4bTIO_OBbINRHI3LmHp-nNxx5RvJ8KXhr5JRmLwDjwAoWnnYbOczLqfxFtEgA00ehQ18lL1hmieOduk/s1600/Properties+for+HelloJni+_027.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQWnKUX0xgZenoyhD6NCWkzuUUbnU-b90bPHEvxoP5kZW5Own5nqp3tpWfIZvy4bTIO_OBbINRHI3LmHp-nNxx5RvJ8KXhr5JRmLwDjwAoWnnYbOczLqfxFtEgA00ehQ18lL1hmieOduk/s320/Properties+for+HelloJni+_027.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575019205276380418&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;次に左にある[Environment]を選択します。下図の中に＜その１＞で設定されたパスを通したいので、[Add...]ボタンを押します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVMu4e9ftry-75ytdTvx_tAhxCQQwxqMD9jHuKWeWP1ak8EJ29mXPhYPqRawC9TVdgarNP110tuaAYC3xPfzLEsnxFTpG-Bis-OEJYxhcYKl8dwSEV-dl6UVvrc7BxxQflWEmxHRGRM6k/s1600/Properties+for+HelloJni+_034.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVMu4e9ftry-75ytdTvx_tAhxCQQwxqMD9jHuKWeWP1ak8EJ29mXPhYPqRawC9TVdgarNP110tuaAYC3xPfzLEsnxFTpG-Bis-OEJYxhcYKl8dwSEV-dl6UVvrc7BxxQflWEmxHRGRM6k/s320/Properties+for+HelloJni+_034.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575021472888803314&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;追加用の画面です。[Name]に「PATH」を入力し、値には[Variables]ボタンを押します。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl8bWRvjKxK_DNibg604wVUzIo2UclGcjUNH_7yVotKxUnMD6ri3Mi3PAf-cAYXPmpDffHVfuMYGojP0I6_pZ1wJobITfF19jxD5opmv9lsLF62j9YWhCR7dJ5r2O_lMcq70PVU7QuUGo/s1600/New+variable+_028.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 92px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl8bWRvjKxK_DNibg604wVUzIo2UclGcjUNH_7yVotKxUnMD6ri3Mi3PAf-cAYXPmpDffHVfuMYGojP0I6_pZ1wJobITfF19jxD5opmv9lsLF62j9YWhCR7dJ5r2O_lMcq70PVU7QuUGo/s320/New+variable+_028.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575020586296159730&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;選択画面の中で、PATHを選択し[OK]ボタンを押します。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCWQ419aE7doYmmG_PVxwZ0jQGDXz_Vw8OjGZY4oKyiJ8phqO1JzTrpeFDR1JvZOe11tYtNMrFUdtcMoLJGvvDMmAFvgCYlg_uvEi4EGQtYFqbV46lkfLstRCcOuzlpC5CfvIkRd7d0PQ/s1600/Select+build+variable+_029.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 237px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCWQ419aE7doYmmG_PVxwZ0jQGDXz_Vw8OjGZY4oKyiJ8phqO1JzTrpeFDR1JvZOe11tYtNMrFUdtcMoLJGvvDMmAFvgCYlg_uvEi4EGQtYFqbV46lkfLstRCcOuzlpC5CfvIkRd7d0PQ/s320/Select+build+variable+_029.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575022466852990258&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;先ほどの入力画面に戻ります。下図の通り直接入力しても同じですね。（笑）&lt;br /&gt;[OK]ボタンで追加終了です。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYQrx_4SmLQ7jpODw2P9eHyhauycBP29hVHdXBKGCXa00Kz62wNETcL4z4f8gx-xf6uaunZJvYM82e8rczaJIoK9RCEWRbSBe0zKCz3ulWvykJqe0KkFsA1_UCJndHshdgZ6bNB0Hsiio/s1600/New+variable+_030.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 92px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYQrx_4SmLQ7jpODw2P9eHyhauycBP29hVHdXBKGCXa00Kz62wNETcL4z4f8gx-xf6uaunZJvYM82e8rczaJIoK9RCEWRbSBe0zKCz3ulWvykJqe0KkFsA1_UCJndHshdgZ6bNB0Hsiio/s320/New+variable+_030.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575022798122230962&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;追加完了した[Environment]です。お疲れ様でした。これで無事設定完了となります。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPhnYy7PhSBEhlclGEaMZ6TBpuBHL4Z0EJVIriHUykA6shR4yZo24JBS16zB_epKxkj4NeeOI4G9zfegu1tSLZZS33GOP7j_7vqZWPGPt5VyzepQSoiPV1k_pmL2gTzHJSX25dbzm42Hs/s1600/Properties+for+HelloJni+_032.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPhnYy7PhSBEhlclGEaMZ6TBpuBHL4Z0EJVIriHUykA6shR4yZo24JBS16zB_epKxkj4NeeOI4G9zfegu1tSLZZS33GOP7j_7vqZWPGPt5VyzepQSoiPV1k_pmL2gTzHJSX25dbzm42Hs/s320/Properties+for+HelloJni+_032.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575023222033888178&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;＜最終確認＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;全ての設定が問題なく行われた場合、Build Projectを行って見ます。下図のように、ナビゲーターで確認していますが、[bin]フォルダには.apkファイルが作成され、[libs][obj]には.soファイルが作成されているのが確認できます。&lt;br /&gt;コンソールにはC-Buildとしてコンパイルされていることが確認出来ますね。&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifa2SlHDTIlpE_61JO2afP9S2J2JLCNwtRkOIumxYqH1ECEVASsS2PJnCLW2Ri87HqpEPRMUNEkRqtKqFWem1M2_bnd1SsxjodGZKTXqZKM2B6ZujOT8SCkwyRt_EwD9nB7hkz7tJ5pdg/s1600/Java+-+Eclipse+SDK+_033.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 228px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifa2SlHDTIlpE_61JO2afP9S2J2JLCNwtRkOIumxYqH1ECEVASsS2PJnCLW2Ri87HqpEPRMUNEkRqtKqFWem1M2_bnd1SsxjodGZKTXqZKM2B6ZujOT8SCkwyRt_EwD9nB7hkz7tJ5pdg/s320/Java+-+Eclipse+SDK+_033.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5575023759581675586&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;お疲れ様でした。&lt;br /&gt;これで、JavaやCソースを修正した後に一括ビルド後にエミュレータで確認することが出来るようになります。</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/853461183443681519/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/02/android-jni-eclipse-cdt-ubuntu-1010.html#comment-form' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/853461183443681519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/853461183443681519'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/02/android-jni-eclipse-cdt-ubuntu-1010.html' title='Android JNI を Eclipse CDT でプロジェクト統合する&lt;br&gt;＜ubuntu 10.10編 その２＞'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEpQ-Nciwb1vvnhABttwy-ggDzopj6dpaGrsxpnL23Hl3za8mXd7JMn0qUC96PLPWntSBM_VZhxIYGsn7hn26dmKgNkmgC-0Vm8Gh9lETjZRMSZ1-SLvCSuhzgmu_wissZa9_hU-hJA3Y/s72-c/New++++_001.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2196598059546776678.post-8635322071932833543</id><published>2011-02-17T23:26:00.017+09:00</published><updated>2011-09-07T15:12:48.379+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Android JNI を Eclipse CDT でプロジェクト統合する＜ubuntu 10.10編 その１＞</title><content type='html'>&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;livedoor版に「サーバ管理者の戯言」としてblogを書いていましたが、半年以上放置した結果スパムコメント送信業者？と削除と追加のイタチごっこに疲れたので、blogspotに移行することにしました。移行といっても、古いデータを持ち込むことはしないので、旧サイトの内容がどうしても見たい方は&lt;a href=&quot;http://blog.livedoor.jp/hatty98fzr4/&quot;&gt;そちら&lt;/a&gt;へ。orz&lt;br /&gt;&lt;br /&gt;AndroidでJNIを開発しようとしていたのですが、ndk r4以降から大幅に変更されています。これらを含めた纏まった情報が無く、いろいろ参照しながら苦労したので備忘録として記載します。&lt;br /&gt;その１ではAndroid SDK環境構築について記載します。といいますのも、JNIのJavaプロジェクトをCDTと統合しプロジェクトのビルド実行時に同時にコンパイルするため、SDKおよびNDK両方の環境が必要となるからです。&lt;br /&gt;&lt;br /&gt;では、SDK構築からとなります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;＜前提＞&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 10.10 で作業を行ったため、Ubuntu 10.10が利用できること。（笑）&lt;/li&gt;&lt;li&gt;Eclipseは標準的なaptまたはSynapticパッケージマネージャでインストールします。そのためEclipseは3.5.2。インストール対象はeclipse-platform,eclipse-jdt,eclipse-cdt,openjdk-6-jre&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;＜Android SDKのインストール＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://developer.android.com/sdk/index.html&quot;&gt;Download the Android SDK&lt;/a&gt;から「android-sdk_r09-linux_x86.tgz」を選択してダウンロードします。&lt;/li&gt;&lt;li&gt;ついでですが、&lt;a href=&quot;http://developer.android.com/sdk/ndk/index.html&quot;&gt;Download the Android NDK&lt;/a&gt;から「android-ndk-r5b-linux-x86.tar.bz2」もダウンロードしておきましょう。&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP-9doOqYYzqj9tAvNpflxk4OYbxqklVW0HaXMrgNAuIEciaju0rNMSKs2UvKHsQ0jXUT8pM-qw7MTwkF-GR-0BkHuCRAKdXlXYznjX17yS5ihc3uMYzq5JHZfKSxaDSiUvy5ouoAlpt4/s1600/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_002.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 279px; height: 100px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP-9doOqYYzqj9tAvNpflxk4OYbxqklVW0HaXMrgNAuIEciaju0rNMSKs2UvKHsQ0jXUT8pM-qw7MTwkF-GR-0BkHuCRAKdXlXYznjX17yS5ihc3uMYzq5JHZfKSxaDSiUvy5ouoAlpt4/s320/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_002.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574680945668920434&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;tgzとbz2を展開します。右クリックで［書庫マネージャで開く］を選択し、自分のホームに展開します。展開ディレクトリは好きな場所で結構なのですが、一般的には「/home/hogehoge」（ユーザ名hogehoge）の直下か、もう一階層掘って展開するのが一般的です。&lt;br /&gt;＃２つとも展開します。コマンドラインで作業しても良いのですが、画像の方が見栄えがいいかと。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;環境変数を変更するので、「.bashrc」を修正します。&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;    $ vi .bashrc&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;最後尾に以下の内容を記載しておきます。私の場合には「/home/hogehoge」直下に展開しましたので、この通りになります。あと、platform-toolsを追加しているのはadbの配置が変更されたためで、追加していると便利程度に考えてください。（笑）&lt;/li&gt;&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;export ANDROID_NDK_ROOT=$HOME/android-ndk-r5b&lt;br /&gt;export ANDROID_SDK_ROOT=$HOME/android-sdk-linux_x86&lt;br /&gt;export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_NDK_ROOT:$PATH&lt;br /&gt;export PATH=$ANDROID_SDK_ROOT/platform-tools:$PATH&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;編集が完了したらviを終了「[esc]wqコマンド」で書き込み、sourceコマンドで反映させます。&lt;pre name=&quot;code&quot; class=&quot;js:nocontrols:nogutter&quot;&gt;    $ source .bashrc&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;＜Eclipse ADTのインストール＞&lt;br /&gt;&lt;ul&gt;&lt;li&gt;eclipseを起動します。その後、[Help]-&gt;[Install New Software...]を選択。&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW5QnBcB4igHgQlUMICnMZwBK1yfM4321g754MKshTeTnvOksNUUSXqe-jittfC3if95b2RRsx8oJqwBhX1B_L8mgw4-_MfFT5X5-_tZOZ65KwLYpxmjp06c7C7AdvuJgFGIdC_WdyF38/s1600/Install+_001.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 249px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW5QnBcB4igHgQlUMICnMZwBK1yfM4321g754MKshTeTnvOksNUUSXqe-jittfC3if95b2RRsx8oJqwBhX1B_L8mgw4-_MfFT5X5-_tZOZ65KwLYpxmjp06c7C7AdvuJgFGIdC_WdyF38/s320/Install+_001.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574691393593277042&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[Add]ボタンを押下します。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCKNXwJxbnJXJsok3jPvIcnNWzKSlyddB5q-1QBJs81t8VCP9ZvsIMBB2BCwIXMYo4evOZvqOIdPCRlIW4DcWnPd1CfTPwbjdy30dsWDq_hzf1nRjjcvV_LnMwfARmu6CgV9WxFXyBeI/s1600/Add+Site+_001.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 127px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCKNXwJxbnJXJsok3jPvIcnNWzKSlyddB5q-1QBJs81t8VCP9ZvsIMBB2BCwIXMYo4evOZvqOIdPCRlIW4DcWnPd1CfTPwbjdy30dsWDq_hzf1nRjjcvV_LnMwfARmu6CgV9WxFXyBeI/s320/Add+Site+_001.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574691833687313410&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[Name]に「ADT Plugin for Eclipse」を入力し、[Location]に「https://dl-ssl.google.com/android/eclipse/」を入力して[OK]ボタンを押下します。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6OYOBJTou1jg7IOcnFB8HBuAgI71j-4vhNFN0n7mj3elbyeTc49bd3SpKsB3kthqXSHOwvU28DOPYNgOpqg-3Slel14KMhaNd2XxZvV4sQhe6tH9-9_lMu9zGSIqz8lcm1Zz9BEnrW78/s1600/Install+_002.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 249px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6OYOBJTou1jg7IOcnFB8HBuAgI71j-4vhNFN0n7mj3elbyeTc49bd3SpKsB3kthqXSHOwvU28DOPYNgOpqg-3Slel14KMhaNd2XxZvV4sQhe6tH9-9_lMu9zGSIqz8lcm1Zz9BEnrW78/s320/Install+_002.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574693253385553874&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;全て選択して[Next]ボタンを押下し、後はAcceptやAccept Allで完了すれば終わりです。&lt;/li&gt;&lt;li&gt;次に、[Windows]-&gt;[Preferrences]を選択します。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlGF3cVHShAdF63-gV51nJ9B79j_bGEDiQn-UKi1Gqbl9fM7AW-dE_NlVAcQ40xl7vgq0RGypN0EZn3LFjCxvtcCQCZBCO7w3A8qYJuC3S5LQpHAQOERnxSD5PJNaIQvE1QWaWYw6a9sA/s1600/Preferences+_001.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 262px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlGF3cVHShAdF63-gV51nJ9B79j_bGEDiQn-UKi1Gqbl9fM7AW-dE_NlVAcQ40xl7vgq0RGypN0EZn3LFjCxvtcCQCZBCO7w3A8qYJuC3S5LQpHAQOERnxSD5PJNaIQvE1QWaWYw6a9sA/s320/Preferences+_001.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574694316212530370&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;[SDK Location]にAndroid SDKを展開した場所を設定します。&lt;/li&gt;&lt;li&gt;[Windows]-&gt;[Android SDK and AVD Manager]を選択して以下の画面を起動します。&lt;br /&gt;Available Packagesの欄で好きな環境をダウンロードします。一般的には開発したい環境のみダウンロードすると、時間の節約にもなります。&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqDpXsbzLi0oI7lfHz7nNcClI68EnmoyrPHsVg3dv0HWyxVGwwM1GWawnypB3SVjErHpFCvlii6flwkzZ_a3gLf_VUWukfWZzYle2JXn6kMSXYqQrlzmOJ2jjLQtZvzPkF3ot7y48uYXE/s1600/Android+SDK+and+AVD+Manager+_001.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 186px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqDpXsbzLi0oI7lfHz7nNcClI68EnmoyrPHsVg3dv0HWyxVGwwM1GWawnypB3SVjErHpFCvlii6flwkzZ_a3gLf_VUWukfWZzYle2JXn6kMSXYqQrlzmOJ2jjLQtZvzPkF3ot7y48uYXE/s320/Android+SDK+and+AVD+Manager+_001.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5574695254486285394&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;後はVirtual Devicesで利用したいエミュレータ環境を生成すると終了です。&lt;/li&gt;&lt;/ul&gt;ここまでで、取り敢えずは一般的なAndroid SDK環境は構築完了のはずです。その２は、単にJNI開発環境構築というかJava環境とCDT連携を記載する予定です。&lt;br /&gt;&lt;br /&gt;うーん。ちょっと長くなりそうな気がするなぁ。Windows環境ではまだ連携環境を構築していないので、どうするかなぁ・・・</content><link rel='replies' type='application/atom+xml' href='http://srvhat09.blogspot.com/feeds/8635322071932833543/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://srvhat09.blogspot.com/2011/02/android-jni-eclipse-cdt.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/8635322071932833543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2196598059546776678/posts/default/8635322071932833543'/><link rel='alternate' type='text/html' href='http://srvhat09.blogspot.com/2011/02/android-jni-eclipse-cdt.html' title='Android JNI を Eclipse CDT でプロジェクト統合する&lt;br&gt;＜ubuntu 10.10編 その１＞'/><author><name>鯖缶</name><uri>http://www.blogger.com/profile/08528187727058178930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP-9doOqYYzqj9tAvNpflxk4OYbxqklVW0HaXMrgNAuIEciaju0rNMSKs2UvKHsQ0jXUT8pM-qw7MTwkF-GR-0BkHuCRAKdXlXYznjX17yS5ihc3uMYzq5JHZfKSxaDSiUvy5ouoAlpt4/s72-c/%25E7%25AF%2584%25E5%259B%25B2%25E3%2582%2592%25E9%2581%25B8%25E6%258A%259E_002.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>