NetBeasnsでGoogle Map Service v2
Google Map Service v2 の利用に苦労したので情報共有します。
OS | Windows8 Pro 64bit |
Java SDK | Oracle Java 1.7.0u45 64bit |
統合開発環境 | NetBeans IDE 7.4 |
Android SDK | Rev.22.3 |
- インストール
- 編集
- Android Manifest の編集
- Layoutファイルの編集
- Activityの編集
- エラー対応
- ビルド⇒エラー
- ライブラリープロジェクトの追加
- ビルド⇒エラー
- build.xmlの初期化
- ビルド⇒成功!
インストール
環境は適宜インストールしてください。JDKは コチラ から
Android SDKは コチラ から
ブラグインのインストール
NBAndroidをインストールメニュー>ツール(T)>プラグイン(P)
名前(N) | NBAndroid |
URL | http://nbandroid.org/release72/updates/updates.xml |
NBAndroid のインストールは コチラ が詳しいです。
インストールが出来ると新規プロジェクトでAndroidが現れます
Android Support Liblary のインストール
ツール>Android SDK Manager
Android Support Liblary のインポート
- Android Support Library
android-support-v4.jar | sdk\extras\android\support\v4 |
- Google Play Services
sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs |
プロジェクトのlibsフォルダへコピー
google-play-services_lib が無事にコンパイルが通る様になったら
google-play-services.jar がダブっていました。
libs側を削除しても問題無くコンパイルが通りました。
ビルドが通らないのが問題だったようですね。
編集
参考 | sdk\extras\google\google_play_services\libprojec\samples\maps |
Android Manifest の編集
権限の追加
<!-- Copied from Google Maps Library/AndroidManifest.xml. --> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <!-- External storage for caching. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- My Location --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- Maps API needs OpenGL ES 2.0. --> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <!-- End of copy. -->
メタデータの追加
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCvGBr5in13NK2yYBR7lhXTtnxj3mrXQy4"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
com.google.android.maps.v2.API_KEY Google APIs Console で個別に取得する必要があり。
http://www.adamrocker.com/blog/334/google-maps-android-api-v2.html が詳しいです。
Layoutファイルの編集
Fragmentを使います
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/>
Activityの編集
Fragmentを読み込んで表示これで動けばよかったのですが
エラー対応
ビルド⇒エラー
layoutファイルのところで下にでていましたがこのままではエラーとなります。
ライブラリープロジェクトの追加
これでエラーが消えます
ビルド⇒エラー
ビルドするとGoogle-play-serveces_libのbuild.xmlでエラーとなります。
build.xmlの初期化
android.bat update project -p .
ビルド⇒成功!
これでビルドが通るようになります。
ただし、Google Map Serviceはエミュレータでは起動しても閉じられてしまいますし、
実機でも署名されていないと地図が表示されません。
地図を含めたデバッグを行うにはkeyファイルで署名したものをインストールする必要があります。
プロジェクト>プロパティ>Export Signed Android package から署名APKの作成が出来ます。
署名に用いるキーはAPI Keyを申請した時のKeyを使います。
Gradle でのlibrary の配信が始まったようですし
NBAndroid のGradleサポート予定との事なのでGradleでのプロジェクトについて勉強中です
Android開発でGitを使った場合に気をつける点
EeeBOXにGitサーバが設定できたのでubuntu側でAndroidSDKからインポートした
Google play servicesのmapサンプルをputしてWindows側でpullしたらはまった話。
- 環境
- 原因
- 解決方法
環境
ubuntu | ubuntu10.04.3LTS(GNU/Linux 3.2.0-57-generic x86_64) |
java | oracle-java 1.7.0_45 |
sdk path | /opt/android-studio/sdk/ |
workscape | /home/tackn/develop/adt/workspace |
git | /home/tackn/git/SampleProject/MainActivity |
変更前
windows | Microsoft Windows 8 Pro 64bit |
java | oracle-java 1.7.0_45 |
sdk path | D:\android\adt\sdk |
workscape | R:\workspace |
git | C:\Users\tackn\git\SampleProject\MainActivity |
- 容量の小さいSSDのCドライブには出来るだけ置かず、HDDのドライブを利用
- RはRAMディスクで少しでも動作を速くしようとしていました。
変更後
windows | Microsoft Windows 8 Pro 64bit |
java | oracle-java 1.7.0_45 |
sdk path | D:\android\adt\sdk |
workscape | D:\work\develop\workspace |
git | D:\work\git\SampleProject\MainActivity |
原因
いろいろ試しましたが、主な原因はubuntuには"/"が有って、windowsには"/"が無いという事でした。- Git管理下にするとworkspaceからgit管理領域へプロジェクトが移動する
- Google play servicesという参照サービスが相対パスなのでエラーになる
- Android Support Toolsというのをandroid 2.2でFragment対応の為にいれるのだが,Git管理下にするときにlibsフォルダが移動せずに参照出来なくなる。
解決方法
ファイルが移動していることに気がつかずプロジェクトのプロパティの設定のみに注視していました。ubuntu側でもチェックすると同様にgit配下へ移動のためライブラリの参照が切れていましたが、設定すれば
それ以降は問題ありませんでした。
パスが変化していることに気がついたのと、参照プロジェクトの指定が開き直すと相対パスになって居ることに気がつき
Windows側でも作業ドライブを決めてライブラリの相対参照が出来る様にしたところコンパイルが通る様になりました。
WindowsのC:\ドライブで開発されている方には無縁だと思いますが、いくつかのドライブを使い分けている場合
- 参照があるとリンクが切れてしまう点
- Gitのリポジトリがデフォルトではhome配下になってしまうので別ドライブで開発していると意図せず別ドライブ参照になる点
今後気をつけたいと思います。
Ubuntu 12.04 LTS のTracでGitレポジトリを管理
Windowsで開発していたときはTracLightningでsubversionを使っていましたが、Gitに興味を持ったのとせっかくEeeBOXでLinux簡易サーバをたてたのでhttp://kanon.ultimania.org/でGitを使えるようにして見ました。
$ uname -a
Linux EeeBOX 3.2.0-57-generic #87-Ubuntu SMP Tue Nov 12 21:35:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Gitのインストール
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install git$ git --version
git version 1.7.9.5
kanon(Trac)のインストール
Mercurial のインストール$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mercurial
kanon のインストール
$ sudo hg clone https://bitbucket.org/okamototk/kanonconductor
$ cd kanonconductor
$ sudo bash kanon-setup
ここを参考に(最初わからずコピペしてはまりました orz)
Gitリポジトリの作成
# git init --bare /var/opt/kanon/git/SampleProject
# git --git-dir=/var/opt/kanon/git/SampleProject update-server-info
# chown www-data:www-data -R /var/opt/kanon/SampleProject
Apacheの設定
kanonの場合新たに記述する必要はありません$ cd /etc/apache2/sites-enabled
$ ls -la vcs < 無かったら(あったと思いますがいろいろやりすぎてわからなくなりました…)
$ sudo ln -s ../sites-available/vcs vcs
$ ls -la vcs
lrwxrwxrwx 1 root root 22 12月 4 19:16 vcs -> ../sites-available/vcs$ vi vcs
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/$ sudo apachectl configtest
Syntax OK
$ sudo apachectl restart
Tracのリポジトリブラウザの設定
TracのGitプラグインインストール$ sudo # easy_install https://github.com/hvr/trac-git-plugin/zipball/v0.12.0.5
trac.iniの設定変更
$ sudo vi /var/opt/kanon/trac/SampleProject/conf/trac.ini
[components] ... tracext.git.* = enabled ... [trac] ... repository_dir = /var/opt/kanon/git/SampleProject repository_sync_per_request = (default) repository_type = git ...
念の為Apacheを再起動して終わりです。
私はこの2つではまったので情報共有しておきます。
追記
Apache2を久しぶりに触ったわけですが、sites-availableとかmodule-availableとかなんでこんな面倒な事をと
自分でln でシンボリックリンクを張ってしまいましたが
a2dismod a2enmod a2dissite a2ensiteと専用のコマンドがあったのですね。
モジュールやサイト単位の停止・起動ができるのでしょうか?
ちょっと勉強せねばなりませんね。
追記2
ubuntuでの管理方法で昔からあったのですね。理解すれば確かにわかりやすいかもしれませんね。
ただやっぱりApacheの再起動は必要だったみたいです。
残念
Ubuntu 12.04 LTS でexFATをSMB公開
大容量の外部ストレージのマウントとWindowsネットワークへの公開
目標
- extFat ドライブをUbuntuにマウント
- ドライブ自体をすべてSMBに公開
- validユーザのみアクセス、読み書き可
extFat ドライブをUbuntuにマウント
exFAT- 32Gbytes以上のメディアも取り扱える
- 1ファイル4GBの制約を超えたファイルが持てる
- クラスタサイズの拡大によるパフォーマンスの改善
今回は32GBのSDHCのSDカードでの利用なのでexFATでなければならない理由はないのですが
今後の事も踏まえてこの方式を選択
$ sudo add-apt-repository ppa:relan /exfat
$ sudo apt-get update
$ sudo apt-get install fuse fuse-exfat exfat-utils
今回は/dev/sdc
$ sudo gparted /dev/sdc
領域だけ確保
$ sudo mkfs.exfat /dev/sdc1
マウントポイント作成
$ sudo mkdir /mnt/share
テストマウント
$ sudo mount -t exfat-fuse /dev/sdc1 /mnt/share
$ touch /dev/sdc1/テスト
$ sudo umount /dev/sdc1
WindowsPCに読ませて文字化けしてないかチェック
特にコードポイントの指定もせずに文字化けもしませんでした。
ドライブ自体をすべてSMBに公開
SMBに公開$ sudo apt-get install samba
$ sudo vi /etc/samba/smb.conf
$ sudo testparm[global]
dos charset = CP932
display charset = UTF-8
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
interfaces = 127.0.0.0/8, 192.168.1.0/24
bind interfaces only = Yes
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
unix extensions = No
dns proxy = No
wins support = Yes
usershare allow guests = Yes
panic action = /usr/share/samba/panic-action %d
idmap config * : backend = tdb
hosts allow = 192.168.1.0/255.255.255.0
printing = bsd
print command = lpr -r -P'%p' %s
lpq command = lpq -P'%p'
lprm command = lprm -P'%p' %j[share
comment = "exFat=32GB@SD"
path = /mnt/share
valid users = tackn
read only = No
force create mode = 0666
directory mask = 0777$ sudo service smbd restart
どうもサーバを再起動するとsmbdが動いてはいるのだけれど
Windowsからアクセスできなかったりサーバが見えなくなったりします。そんなときは
$ sudo service smbd restart
$ sudo service nmbd restartすると回復します
validユーザのみアクセス、読み書き可
Smb上のセキュリティはこれで良いのですが、
ファイルシステム上のセキュリティがまだ残っています。とりあえずUUIDの調査
$ ls -l /dev/disk/by-uuid | grep sdc1
lrwxrwxrwx 1 root root 10 11月 27 19:09 1B11-8DF9 -> ../../sdc1[ 1B11-8DF9]がUUID
/dev/sdc1の指定だと何かの拍子に/dev/sdb1になった時にマウントできないのでuuidでマウント
$ sudo gedit /etc/fstab
UUID=1B11-8DF9 /mnt/share exfat-fuse defaults,gid=65534,uid=65534,users,umask=000 0 0gid=65534 nobodyでマウント
uid=65534 nogroupでマウント
umask=000 mode0777でマウント$ sudo reboot
$ sudo service smbd restart
$ sudo service nmbd restart
本当はmode=0777でマウントせずに
SMB利用ユーザだけのグループを作成して
0775か0770でマウントするべきなのでしょうね11/28 7:50 追記
やはりmode=777でのマウントは気味が悪い$ groups tackn
tackn : tackn adm cdrom sudo dip plugdev lpadmin sambasharesambashare というグループが目的的には良さそう
grep tackn /etc/group
adm:x:4:tackn
cdrom:x:24:tackn
sudo:x:27:tackn
dip:x:30:tackn
plugdev:x:46:tackn
lpadmin:x:109:tackn
tackn:x:1000:
sambashare:x:124:tackngidが124とわかったのでumaskの修正
$ sudo vi /etc/fstab
UUID=1B11-8DF9 /mnt/share exfat-fuse defaults,gid=65534,uid=65534,umask=007 0 0
$ sudo rebootうん、うまく行った。
まぁ sambashareグループ自体はほぼ誰でもなれるので気分的なものだけれど。
セキュリティレベルを上げる必要があったら新たにグループを作れば良いかなと。気になったのはsmbd サービスを止めてもアンマウント出来ない
何が捕まえているのだろう
Ubuntu 12.04 LTS の環境のセットアップ
LiveCD では起動できるソフトに限界を感じたのと、USBのメモリーの一部に仕込んでおくことで普段はUSBメモリとして使い、PCトラブル時にはレスキューディスクとして利用を考えて環境を作った際のメモ
日本語Rimix イメージを利用 Ubuntuの日本語環境 | Ubuntu Japanese Team
インストール環境
GIGABYTE | S-sirises GA-MA790GP-DS4H |
CPU | AMD Phenom X4 |
memory | 6GB(DDR2 2GB x 3) |
ストレージ | USB メモリー |
LiveCDで起動して、gpartedで領域をしてインストール
領域分割とかインストール自体はウィザードの指示にしたがえば出きるかと
ただ私はこんな感じになりました。
始点・終点を見ていただければ苦労したのが分かっていただけるかと
もちろんgrubでも一悶着あり、今もスムーズに起動してくれないくせのあるドライブになってしまいました。
まぁ落としたときのトラップセキュリティーになれば(ぉぃ
ここからが本題
Android の勉強を再開しようと思っています。
今は統合開発環境だけでもたくさんあります。
- ADT (Eclipse)
- Android Studio(IntelliJ)
- NetBeans
- etc..
DDMSとかが呼び出せるだけで避ければNetBeansとサードパーティープラグインが個人的には好み
メニューがほぼ日本語化されているので心にやさしい
しかしGUIエディタとして考えるとGoogle提供のADTとStudioになるのかなと思っています。
とりあえずすべてをインストールして Hello Worldをやってみました。
個人的にな感想
- ADT (Eclipse)
- ちょっと重いかな。
- Pleiades をかなり日本語化して使うことができるhttp://mergedoc.sourceforge.jp/
- Android Studio(IntelliJ)
- 未体験ゾーン、なれれば使い勝手は良さそう
- 分からないものを英語で使うのは辛い
- Pleiades を無理に当てたらフォントが豆腐になってしまって断念
- 要継続調査
JDKのインストール
Ubuntu 12.04 に Oracle Java 6, 7 (JRE, JDK) をインストール - Qiita
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
これで切り替えられるらしい
sudo update-alternatives --config java
Android SDKを取得
Download Android Studio and SDK toolsADT のインストール
32bit にするか 64bit にするのかと、規約同意です
Android Studio
こちらから取得http://developer.android.com/sdk/index.html
共に好きな場所に解凍すればOK
NetBeans
NetBeans NetBeans 日本語サイトnetbeans-7.4-javase-linux.shをダウンロード
shを実行するとJDKの検索からインストール ウィザードの起動も日本語です。
猫びーんかわいい
サードパーティせいのアンドロイドプラグイン NBAndroidが必要
サードパーティプラグインの追加してAndroid /Mobilityをインストール
NBAndroid : http://nbandroid.org/release72/updates/updates.xml
こちらWindowsだと自分のAppData配下がデフォルトなのですが、
Microsoftアカウントに日本語名を登録しているとホームフォルダに2バイトが混じるので
実行するとこけるのでどこか違うパス長の短いところに入れ他方が無難です。
メモ
Android SDKはサイズが大きいのでそれぞれでダウンロードせずにAndroid Studio配下のsdkフォルダをすべて参照するようにしてディスクスペースを稼いでいます。感想
Linux , Windows と各IDEを触ってみた感想Eclipse | 無難 |
IntelliJ | なれるまで時間がかかりそう |
NetBeans | 画面デザイナがあれば |
すべてのプロジェクトフォルダ(ワークフォルダ)をLinuxとWindowsで共用してみたのですが
Android SDKのパスの問題がありEclipseやIntelliJではうまく行きませんでした。
得にIntelliJはどこに残っていて設定すればよいのかも分からず。GitとかSubVersion軽油で共用した方がよさそうですね。いろんな意味で。
Eclipseかなと思ったので少し高速化を試してみました。
Eclipse 高速化
1.ramdiskの構築/etc/rc.local でRAMDISKの作成
mount -t tmpfs -o size=1g,mode=0777 /dev/shm /mnt/ramdisk
ついでに/etc/fstab でテンポラリが作られそうなフォルダもRAMDISK化
proc /proc proc nodev,noexec,nosuid 0 0
tmpfs /dev/shm tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
2.rsyncのスクリプト作成
cp_Eclipse_To_RamDisk.sh を作成
#!/bin/bash
STATIC="/home/tackn/adt/eclipse"
VOLATILE="/mnt/ramdisk/eclipse"-r $VOLATILE || install -dm700 $VOLATILE
if -e $VOLATILE/.sync ; then
rsync -av --delete --exclude='.sync' $VOLATILE/ $STATIC/
else
rsync -av $STATIC/ $VOLATILE/
touch $VOLATILE/.sync
fiSTATIC2="/media/UBUNTU/develop/adt/workspace"
VOLATILE2="/mnt/ramdisk/workspace"-r $VOLATILE2 || install -dm700 $VOLATILE2
if -e $VOLATILE2/.sync ; then
rsync -av --delete --exclude='.sync' $VOLATILE2/ $STATIC2/
else
rsync -av $STATIC2/ $VOLATILE2/
touch $VOLATILE2/.sync
fi
3.cronに登録して定期的にストレージへ書き戻す
crontab -e でエディタを起動
10分毎に同期スクリプトを実行
4.起動時実行スクリプトに登録
念のためログイン直後に実行してramdisk上へ実態を同期させる
5.desktopファイルを作成してデスクトップから起動出きるようにする
1.Eclipseは起動フォルダも気にしないといけないので eclipse.sh というダミースクリプトを作り
eclipseはそこから呼び出す
2.desktopファイルをデスクトップに作成
[Desktop Entry]
Encoding=UTF-8
Name=ADTwithRamDisk
Comment=The Android Developer Tool with RamDisk
Exec=/mnt/ramdisk/eclipse/eclipse.sh
Icon=/mnt/ramdisk/eclipse/icon.xpm
Categories=Application
Version=1.0
Type=Application
Terminal=0
Becky!でGmail 2段認証でIMAP4メールで送信
BeckyでGmailを使っているときに2段認証後にメール送信に失敗したので備忘録
環境
OS | Windows8Pro 64bit |
Becky! | 2.64.06[ja] |
Gmail | 2段認証 |
Gmail 2段認証
既に2段認証を始めているという前提です。2 段階認証プロセスでビジネスを保護する - G Suite 管理者 ヘルプ
- Google にログインしてアクセス
- アカウントを選択
- セキュリティ
- 2段認証プロセス
- 設定
- アプリケーション固有のパスワード
- アプリケーション固有のパスワードの管理
- 名前を付ける (なんでも良い)
- パスワードを生成
- ここでは mqectiupwxqqxxevr がBeckyで使う固有パスワード
- アプリケーション毎に作成して使い回さない。
- アプリケーション毎に作っておけば個別に廃止出来る
Beckyの設定
Gmail用のアカウントが作ってあるとする受信プロトコル(T) | IMAP4rev1 |
IMAPサーバ(受信) | imap.gmail.com ☑IMAPS |
SMTPサーバ(送信) | smtp.gmail.com ☑OP25B ☑SMTPS |
ユーザID(U) | Gmailのアドレス |
パスワード(P) | 固有パスワードで取得したパスワード |
認証方式 | 標準 |