Android開発

[ リスト | 詳細 ]

記事検索
検索

全6ページ

[1] [2] [3] [4] [5] [6]

[ 次のページ ]

環境
 Eclipse(JUNO) 英語版、Windows 7(32bit)、Android SDK(22.3)、Android NDK(r9c)
問題
 C/C++ ソースのinclide ファイルがいつまでもunresolved になり、コンパイルが(Eclipse からでは)通らない。コマンドラインでは通る。
解決
 property →c/c++ Build →Discovery Options の、Automate discovery of paths and symbols のチェックを外してOK、再度チェックを入れてOK、Eclipse再起動

イメージ 1

余禄
久しぶりにEclipse でどハマリ。新規で追加したlibrary のヘッダがいつまでも解決されない状態に。パス設定にはきちんとかかれているし、ndk-build をコマンドラインから呼び出せば問題なく実行できるので、Eclipse のどっかがおかしくなったな……、とみて、パス設定まわりを再生成するように対処してみました。手順の最後のEclipse 再起動、はIndexer が走ればいいので、右クリック→Index→Rebuild でもいいと思いますが、Eclipse のIndexer は信用してないので、再起動で。

このIndexer まわりもまた魔窟らしいがなあ……。
新年明けて機種変したので、年明けはAndroid 4.2.2 との格闘から……というより、Arrows A F202、なのかな。先が思いやられます。

-☆-

どうもAndroid 3.0 から、USB接続したときに「メディアデバイスとして接続する(MTP/Media Transfer Protocol)」か、「カメラデバイスとして接続する(PTP/Picture Transfer Protocol)」ようになりました。それ以前だと、単なるUSBストレージ(マスストレージ)として認識されていたと思います。
で、開発者モードにするのにも色々あったのですが、それはググって頂くと歴戦の記録があちこちにあるのでそちらをごらん頂くとして、こちらでは「Arrows A F202でSDカード読み書きしているアプリが、デバッグ起動しない」という、なんというか機種固有めいた出来事についてお話いたします。


さて。
デバッグ起動できないアプリ、先述したMTPとPTP、これらがどうも悪さをしているようです。MTPのままだと、SDカードにアクセスできないようなので、PTPに切り替えればいいらしいのですが……Arrows A、メニューのどこにもないですな?
延々悩む事三十分、ハッと気付いて通知バーをにゅるっと下げてみたところ、USBデバッグが接続されましたの下の段、「メディアデバイスとして接続」とあります。この下に小文字で「USBオプションを選択するにはタップしてください」と……!!

イメージ 1
いえー


-☆-

うちではこれで無事にSDカードにアクセスするアプリのデバッグできるようになったのですが(割と機能も増えて便利)、まあ2.2時代の、誰でも開発者モードに出来ていた(いうまでもなく危険)のを隠蔽したりした結果、ちょっと機種ごとの差異がますます出てきたなあ、という気がします。いや、機種ごとの差異とかAndroidでいまさらいう話でもないんですが、4.2.2 縛りで調べても色々違いすぎる感がつようございまして……
備忘録的に自分でもメモ。

Android デヴァイスやエミュレータを再接続・再起動した場合に、(Eclipse ビュー上の)Logcat でログが出力されなくなる事が最近また多発するようになりまして。なんかadb 再起動してもNGな事が多く、結局はEclipse を再起動して無駄な時間と精神をすり減らしていたのですが、どうやらかんたんな方法があるようなのでメモ。

やりかた:Eclipse のDDMS パースペクティブで、デバイスを選択する

つまり単にデバイス選択が勝手に外れてる、ってことですな。ははは。そりゃログも出んわ。ははははは。

イメージ 1
何で外すのよ……


あ、これでダメならEclipse再起動ですな。
前回は、Android用に加工されているのを使ってライブラリを作成しましたが、件のライブラリのバージョンが1.4.2 と低いのがずっと気になっていたので、本家libpng からソースを持ってきてコンパイルする方法を試してみたところ、タイヘン簡単だったので備忘録として。

あ、またもWindowsマシンで完結です。

-☆-

用意するもの
 Android-NDK 環境
 cmd.exe
 libpng のソース一式

●ソースを取得します
libpngのサイトから、最新のソースをダウンロードします。下のほうの表の「Source code」から、お好きなサイト、またはプロトコルで。現時点では1.6.6です。


●ソースを展開し、移動
ダウンロードした圧縮ファイルを、適当なところで展開します。
出来上がったディレクトリの、Cソースなどが散らかっているところ(lpng166/ )に、jni ディレクトリを作成し、そこへ全てのファイルをコピーします。
こんなディレクトリ構成に。
lpng166/
|
 + jni/
   |
   + contrib/
   + projects/
   + scripts/
   png.c
   ongerror.c
    :
    :


●scripts/pngconf.h.prebuilt を jni/ 直下へコピーし、pngconf.h へリネーム
ま、コピーしてリネームするだけです。


●jni/ 直下に、Android.mk とApplication.mk を作成
Android.mk は以下のように。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_CFLAGS := 

LOCAL_MODULE    := libpng
LOCAL_SRC_FILES := png.c pngerror.c pngget.c pngmem.c pngpread.c pngread.c \
          pngrio.c pngrtran.c pngrutil.c pngset.c pngtrans.c 	pngwio.c \
          pngwrite.c pngwtran.c pngwutil.c 
	
LOCAL_LDLIBS := -lz

# ライブラリをstatic にするかshared にするかはお好みで
include $(BUILD_SHARED_LIBRARY)
#include $(BUILD_STATIC_LIBRARY)

Apprication.mkは以下のように。デバッグにするかどうかはお好みで。
APP_OPTIM := release
APP_MODULES := libpng


●ndk-build する
コマンドラインでjni のひとつ上のディレクトリ(今回はlpng166)へ移動して、そこで
ndk-build NDK_PRIJECT_PATH=./
を実行すれば、ライブラリバイナリが作成されます。


●使う
あとは前回の組み込み方と同様にして使えばOKです。

-☆-

PNGの古いバージョンは脆弱性があるので、なるべく新しいのを使ったほうがいいと思いました。まる。

libpng組み込み

OpenCVを使うにはチト牛刀割鶏なので、png のライブラリを組み込むことにしました。以前、コンパイルしたstatic library をndk のディレクトリ下に置いて云々、というのをやった気がしましたが(ブログに残してないな?)、アレだとNDKのバージョンあげるたびに色々戻さないといけないので、今回はライブラリのコンパイルと組み込みは別でやる方向で。
ついでに、今Linux環境ないので、全部Windows で行いましょう。

あ、勿論Android NDK環境です。

-☆-

用意するもの
・git と、ndk-build が使えるようになっているcmd.exe。要はgitインストールして、ndk 開発環境が整っていれば大丈夫なはずです



ソースを取得します。
libpng のソースを持ってこないとならないんですが、Android用に出されているlibpng はちょっとコンパイルがメンドクサイので、個人によってその旨修正されたソースをいただきましょう。ありがとうございます。

Android.mkの修正
取得したソースの jni/Android.mk を修正します。コメントアウトされているSHARED_LIB を有効にし、STATIC_LIBの方をコメントアウトします。
include $(BUILD_SHARED_LIBRARY)
#include $(BUILD_STATIC_LIBRARY)


ビルドする
cmd 上で
ndk-buld NDK_PROJECT_PATH=./
と実行すると、ビルドがサクサク進んでlibpng.so ができるはずです。ディレクトリセパレータは / のままでOKです。


プロジェクトへ組み込む
出来上がったlibpng.so と、持ってきたソースファイル中にあるヘッダ、png.h とpngconf.h をプロジェクトのjni 以下へコピーします。分かり易いようにサブディレクトリを分けると吉。
今回は
jni/libpng/include へ png.h,pngconf.h
jni/libpng/lib/へ libpng.so
とします。


プロジェクトのAndroid.mk を修正
libpng 用に新たなモジュールを作って、それを共用ライブラリとしてプロジェクトへ組み込む形です。
プロジェクトのAndroid.mk 冒頭に、その分の修正を行います。

LOCAL_PATH := $(call my-dir)

#libpng 用
include $(CLEAR_VARS)
LOCAL_MODULE := libpng-module
LOCAL_SRC_FILES := libpngl/lib/libpng.so
include $(PREBUILT_SHARED_LIBRARY)

#組み込むプロジェクト 用
include $(CLEAR_VARS)

LOCAL_MODULE := HogeHoge
LOCAL_SRC_FILES := hoge.cpp,fuga.cpp
LOCAL_LDLIBS += -ldl -llog -lGLESv1_CM

LOCAL_SHARED_LIBRARIES := libpng-module
LOCAL_C_INCLUDE := jni/libpng/include
include $(BUILD_SHARED_LIBRARY)


こんな感じ。libpng 用のコンパイル指示子はPREBUILT_SHARED_LIBRARYなので、他のモジュール(プロジェクト側)から読み込む際は、LOCAL_SHARED_LIBRARIES を指定します。
また、LOCAL_SRC_FILES で取り込むshared object は、それぞれのアーキテクチャに合わせたものにしないとならないはずなので、万が一NDKでx86バイナリ、なんていう環境の場合はその旨コンパイルあたりからどうにかしてください。shared object コンパイル時のApplication.mkの修正と、あとはTARGET_ARCH_ABI をみて取り込むパスを切り替えるだけでなんとかなると思いますが。


プロジェクトから使う
あとはプロジェクトのCソースなどから、png_create_read_strcut云々、とAPIを呼んでやればOKです。イエー。
あ、JavaのActivityあたりのソースから、loadLibrary("png" )するのを忘れないように!!

全6ページ

[1] [2] [3] [4] [5] [6]

[ 次のページ ]


.
Count_Zero
Count_Zero
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について
友だち(2)
  • 遊佐隼之助
友だち一覧

過去の記事一覧

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
検索 検索

スマートフォンで見る

モバイル版Yahoo!ブログにアクセス!

スマートフォン版Yahoo!ブログにアクセス!

よしもとブログランキング

もっと見る

[PR]お得情報

数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事