Eclipse での設定など
ndk-build でのエラー
Compile thumb : ~ <= ~.c が表示されない.
Android.mk の記述ミス.LOCAL_SRC_FILE になっていた(S がなかった).
TextView に setText などをするとエラーになる.
setContentView(R.layout.activity_main) が呼ばれていなかった(コメントになっていた).
cpp として作成したものの利用で実行時エラー
原因はわからず.c のファイルとして書換えてビルドで通った.
undefined reference to ‘sysinfo’
Using sysinfo in Android NDK を見つけたが,使い方がわからず.
undefined reference to ‘__NR_sysinfo’ となってしまう.
C/C++ プロジェクトのインクルードパスの設定
プロジェクトの「プロパティ」,「C/C++ ビルド」-「設定」-「ツール設定」-「GCC ~ Compiler」-「インクルード」.
全プロジェクトで有効にするには環境変数としての登録が必要?
NDK 環境作成 – 2
Eclipse と ADT で,Java を使用した Android AP は作成可能となった.
まだ NDK を入れてないので,プロジェクトの「右クリック」から「Android ツール」-「Add Native Support…」を選択すると,
Android NDK を展開し,そのパスを「ウィンドウ」-「設定」,「Android」-「NDK」にパスを設定.
これで,「Add Android Native Support」ダイアログの「完了」が押せる様になる.
コマンドプロンプトから ndk-build などを実行するために環境変数の Path を設定
%ANDROID_NDK% に c:\~\android-ndk-r8e
%Path% に %ANDROID_NDK% を追加.
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
よくわからないが,検索すると
APP_PLATFORM=android-8 と記述した Application.mk を jni の下に作成すると通る.
NDK 環境作成 – 1
まだ完全ではないが,何とか NDK のサンプルのビルド,実行までは可能となったので,
ここまでで参考にした本は,Android アプリ開発超入門,Android NDK 入門.
他にも NDK 関係の本は購入したが,開発環境の構築に関してはよくわからなかった.
PC 環境としては,Virtusl PC で Win XP を用意.メモリは 1 GB でも動作するが,1.2 GB 以上ある方が良い?
メモリ 1 GB では,エミュレータでのテストでメモリ不足となってしまったことがあった.
Eclipse のインストールには,Pleiades – Eclipse プラグイン日本語化プラグインを利用.
Pleiades All in One 4.2.2a.v20130303
その中の Ultimate 32 bit Full Edition
注意しなければならないのが,zip の展開先フォルダの指定.
WIn XP で,zip を c ドライブのルートに置いて,展開ウィザードの展開先を c:\ に指定した.
展開には 30 分以上かかった(45 分位)?
ここまでで,「ファイル」-「プロジェクト」から,「Hello World C++ プロジェクト」-「MinGW」で exe が生成できる.
「ヘルプ」-「新規ソフトウェアのインストール」でADT プラグインを組込み.
作業対象に,http://dl-ssl.google.com/android/eclipse/ と入力.
「開発ツール」と「NDK プラグイン」をチェックしてインストール.
Eclipse の再起動後,SDK の場所を指定するか,ダウンロードしてインストールできる.
これで,「Android アプリケーション プロジェクト」が生成できるようになる.
デフォルト状態でのスケルトンの生成では,API 8 のインストールが要求された.
出来上がったスケルトンの状態では,ビルドできない.
MainActivity.java の R の部分がエラーとなっている.
「ウィンドウ」-「パースペクティブのカスタマイズ」で「Android SDK および AVD マネージャー」を追加.
よくわからないが,SDK Manager を起動してインストールされてないとなったものをインストール.
Android SDK Build-tools
4.2.2 ARM , x86 , MIPS
Google USB Driver
Eclipse の再起動で,R の部分のエラー表示はなくなりビルド可能となった.
エミュレータを作成して,動作を確認.
Java での Android 開発環境ができた.
他にも,SDK Manager を利用して,幾つかの API をインストール.
Fedora をインストール
Mac の VirtualBox に Fedora をインストール.
最初,WIn 7 の VirtualBox に Ubuntu をインストールした.
インストール直後は動作していたが,そのうち起動時にブルースクリーンとなることがあった.
以前 Android 環境を入れた時もそうだったので,VirtualBox との相性か?
ホームにできるフォルダが日本語名となるため検索すると,
ホームディレクトリのフォルダ名を日本語から英語に変更するには
2013/06/26
環境を作成した時点では,うまく Windows Network が見えなかったが,…
今開いてみたら見える様になっていた.
2013/06/27
デスクトップをカスタマイズしようと,ここを参考に GNOME Shell を有効に,…
インストール後,再起動して,「GNOME Shell 拡張機能」の場所がわからなかったので,
「アクティビティ」-「アプリケーションの表示」-「Tweak Tool」.
「検索ワードを入力…」に “Tool” と入力するか,「アクセサリ」で絞った方がはやいかも.
python.exe CreateProcess error=14001
Win XP 環境に,Titanium Studio をインストール.
Android SDK などの環境のパスなどを設定.
プロジェクトを作成して,スケルトンのままで実行すると,
FastDev launching error
Cannot run program “C:\Program Files\Appcelerator\Titanium Studio\plugins\
com.appcelerator.titanium.python.win32_1.0.0.1338515509\python\python.exe”:
CreateProcess error=14001, ?±??A?v???P?[?V??????\?¬?a?3?μ?-??¢????A?A?v???P?
検索すると VC の再頒布パッケージが必要とのこと.
イベントビューアを見ると確かに,
面倒だったので,VC 9 と SP1 の両方をインストールして,起動する様になった.
2013/06/25
スケルトンの状態で,「Run As」-「Android Emulator」とすると,
Titanium Command-Line Interface, CLI version 3.1.1, Titanium SDK version 3.1.1.GA
Copyright (c) 2012-2013, Appcelerator, Inc. All Rights Reserved.
[ERROR] : “Missing Java SDK. Please make sure Java SDK is on your PATH
[ERROR] Application Installer abnormal process termination. Process exit value was 1
どこの部分を設定するのかよくわからなかったが,
インストール手順などを検索すると,環境変数を指定していない.
どれが必要なのかよくわからないが,
%ANDROID_SDK% , %JAVA_HOME% の追加と,%PATH% にそれぞれの bin や tools などを追加.
これで,Emulator は起動する様にはなったが,うまく動作してない?それとも遅いだけ?
SMT-i9100 の接続
以前調べた時,実機との接続のためのドライバがないことは知っていた.
が,あまりにも Emulator では遅かったので,…
参考にさせてもらったのはここ.
Android 開発のためのテスト環境を Virtual PC 内の WinXP に作成している.
SDK もその環境にはインストールしてある.
そのため,ゲストの SDK のフォルダを共有してインストールすることにした.
1. ホストの Win7 x64 で先ず接続するために.
android_winusb.inf に SMT-i9100 用を追加.
[Google.NTamd64]
%SingleAdbInterface% = USB_Install, USB\VID_04E8&PID_9102
%CompositeAdbInterface% = USB_Install, USB\VID_04E8&PID_9102&MI_01
後で,ゲストの XP にもドライバを入れる必要があるので,[Google.NTx86] にも追加.
2. ドライバのインストールで,変更した inf を指定.
デバイスマネージャで Android Device – Android Composite ADB Interface となっていれば良いみたい.
3. 今度はゲストの XP に.メニューの「USB」-「SMT-i9100」 で接続.
ホストの時と同様に inf を指定してドライバをインストール.
Titanium Studio で,スケルトンのプロジェクトを開いて,Android Device として実行すると何とか起動した.
2013/06/27
KitchenSink をダウンロードして,Mobile Web Preview in Browser は動作するが
Android Device とすると,
Titanium Command-Line Interface, CLI version 3.1.1, Titanium SDK version 3.1.1.GA
[INFO] : Running build process: python “C:\…\mobilesdk\win32\3.1.1.GA\android\builder.py” …
[INFO] logfile = C:\…\Titanium_Studio_Workspace\KitchenSink\build.log
[ERROR] : Build process exited with code 1
[ERROR] : Project failed to build after 7s 33ms
よくわからないが,Android 3.0 (API 11) のインストールで通る様になった?
けど,実機 SMT-i9100 では動作しない?
PC ,デバイス共に再起動で,起動時の Titanium のロゴまでは表示された.
途中で止まったようになったので,もう一回デバイスを再起動して,メニューから表示するとできた.
MinGW インストール
Android の開発環境を用意しようとしていて,
Pleiades – Eclipse プラグイン日本語化プラグイン をインストールまでは行っていた.
pleiades-e4.2-ultimate-32bit-jre_20130303.zip
以前インストールした(展開)時は,ファイル名の長さの制限で引っかかって,インストールまでで中断していた.
が,よくわからない.
その中に MinGW があったので,そこから,…
~\MinGW\bin に gcc.exe などがあったので,
テスト用の Hello.c を作成して,コンパイルすると a.exe はできた.
c:\~\My Documents\Temp\Test> type T_Hello.c
#include <stdio.h>
int main (void) {
printf(“hello\n”) ;
return 0 ;
}
c:\~\My Documents\Temp\Test> C:\pleiades\eclipse\mingw\bin\gcc.exe T_Hello.c
c:\~\My Documents\Temp\Test> dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7C5D-D1D9 です
c:\~\My Documents\Temp\Test のディレクトリ
2013/06/20 14:19 .
2013/06/20 14:19 ..
2013/06/20 14:19 49,177 a.exe
2013/06/20 14:07 78 T_Hello.c
2 個のファイル 49,255 バイト
2 個のディレクトリ 114,850,582,528 バイトの空き領域
c:\~\My Documents\Temp\Test> a
hello
これでは使い勝手が悪いので調べると,MSYS が使えそう.
けど MinGW フォルダには見当たらない.
MinGw Getting Started のリンク mingw-get-inst より,もう一度インストール.
MinGW Shell で開いてくるのは,C:\MinGW\msys\1.0\home\Iwao
C:\>tree \MinGW\msys\1.0\home
フォルダ パスの一覧
ボリューム シリアル番号は 7C5D-D1D9 です
C:\MINGW\MSYS\1.0\HOME
└─Iwao
└─Temp
└─Test
MSYS コンソール内で,
ネットワーク上のファイルは,//DevXP/C_Drive/…/c_src/
ls c:
ls \\
ls \\\\DevXP\\C_Drive
\\ と / は,等価?
more ではなく less
C++ のコード(std::cout<<“Hello CPP” << std::endl ;)をコンパイルすると,
$ gcc testcpp.cpp
C:\~\Temp\ccYlk1I9.o:testcpp.cpp:(.text+0x19): undefined reference to `std::cout’
C:\~\Temp\ccYlk1I9.o:testcpp.cpp:(.text+0x1e): undefined reference to `std::basic_ostream …
…
C:\~\Temp\ccYlk1I9.o:testcpp.cpp:(.text+0x6a): undefined reference to `std::ios_base::Init::Init()’
collect2: ld はステータス 1 で終了しました
gcc ではなく,g++ を利用するみたい.
また,出来上がった C++ の exe は,MSYS コンソールの外では,
—————————
TestCPP.exe – コンポーネントが見つかりません
—————————
libgcc_s_dw2-1.dll が見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。
—————————
OK
—————————
2013/06/25
Eclipse を起動して,
「ファイル」-「新規」-「C++ プロジェクト」,「Hello World …」-「MinGW GCC」.
ビルド,実行で,
CPoint と CGPoint
以前作成した MemoryStatus クラスを利用して,Win , iOS で書いてみた.
MemoryStatus の配列として,MemoryStatusAry を作成.
また,float の配列をそれぞれの点配列に変換する ::GraphGetPoint を用意.
Win
void CMemSSDView::OnPaint()
{
CPaintDC dc(this);
CRect rect ;
GetClientRect(rect) ;
{
std::vector<float> grphF = MemSA.GetGraph(MemoryStatusAry::WinPhysF) ;
std::vector<float> grphT = MemSA.GetGraph(MemoryStatusAry::WinPhysT) ;
std::vector<float> grphP = MemSA.GetGraph(MemoryStatusAry::WinPageF) ;
std::vector<CPoint> pntsF = ::GraphGetPoint(grphF,rect) ;
std::vector<CPoint> pntsT = ::GraphGetPoint(grphT,rect) ;
std::vector<CPoint> pntsP = ::GraphGetPoint(grphP,rect) ;
{
CPen penGreen(PS_SOLID,1,RGB(0,192,0)) ;
CPen* oldPen = dc.SelectObject(&penGreen) ;
dc.Polyline(&pntsF[0],pntsF.size()) ;
CPen penRed(PS_SOLID,1,RGB(192,0,0)) ;
oldPen = dc.SelectObject(&penRed) ;
dc.Polyline(&pntsT[0],pntsT.size()) ;
CPen penBlue(PS_SOLID,1,RGB(0,0,192)) ;
oldPen = dc.SelectObject(&penBlue) ;
dc.Polyline(&pntsP[0],pntsP.size()) ;
dc.SelectObject(oldPen) ;
}
}
}
iOS
- (void)drawRect:(CGRect)rect
{
_context = UIGraphicsGetCurrentContext() ;
{
std::vector<float> grphP = MemSA.GetGraph(MemoryStatusAry::MacPFree) ;
std::vector<float> grphA = MemSA.GetGraph(MemoryStatusAry::MacInact) ;
std::vector<float> grphW = MemSA.GetGraph(MemoryStatusAry::MacWired) ;
std::vector<CGPoint> pntsP = ::GraphGetPoint(grphP,rect) ;
std::vector<CGPoint> pntsA = ::GraphGetPoint(grphA,rect) ;
std::vector<CGPoint> pntsW = ::GraphGetPoint(grphW,rect) ;
{
[self setColor_r:0 g:192 b:0] ;
CGContextAddLines (_context,&pntsP[0],pntsP.size()) ;
CGContextStrokePath (_context) ;
[self setColor_r:0 g:0 b:192] ;
CGContextAddLines (_context,&pntsA[0],pntsA.size()) ;
CGContextStrokePath (_context) ;
[self setColor_r:192 g:0 b:0] ;
CGContextAddLines (_context,&pntsW[0],pntsW.size()) ;
CGContextStrokePath (_context) ;
}
}
}
UIView のサイズ
MFC の CWnd::GetClientRect にあたるもの?
drawRect の引数の rect
self.bounds , self.frame
画面の向きに対して自動的に反映させるには
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ;
MoveTo , LineTo
CGContextMoveToPoint , CGContextAddLineToPoint
CGPathMoveToPoint , CGPathAddLineToPoint
Polyline
CGContextAddLines
CGPathAddLines