去年の7月にリリースしたアプリが今年の3月に Play store から ban された。忙しくて放置していたのだが、年末に時間ができたので対応。
主に参考にしたのはこちら。
Firebase Hosting でサイトを公開するのに参考にしたのはこちら。
細かいほぼ一年半ぶりに Android 開発したこともとあってこまごまとしたところで躓いたが、半日ほどでリリース申請までこぎつけた。
徒然日記 Android developing side
2019年12月29日日曜日
2016年10月7日金曜日
Error:Could not find com.android.tools.build:gradle:2.2.0.
Android Studio を Update した。
例によって Sync し直すよ!と言ってきたので、OK とするとエラーが
調べてみると、gradle を勝手にネットから引っ張て来るのだが、2.2.0 が maven にはなくて、jcenter から取ってこなくてはならなくなったらしい。
https://wasabeef.jp/android-gradle/
http://stackoverflow.com/questions/38702032/android-studio-gradle-refresh-failed-could-not-find-com-android-tools-buildg
で、build.gradle に
例によって Sync し直すよ!と言ってきたので、OK とするとエラーが
Error:Could not find com.android.tools.build:gradle:2.2.0.
Searched in the following locations:
https://repo1.maven.org/maven2/com/android/tools/build/gradle/2.2.0/gradle-2.2.0.pom
https://repo1.maven.org/maven2/com/android/tools/build/gradle/2.2.0/gradle-2.2.0.jar
Required by:
XXXX.plugins:openpgp-api-library:unspecified
調べてみると、gradle を勝手にネットから引っ張て来るのだが、2.2.0 が maven にはなくて、jcenter から取ってこなくてはならなくなったらしい。
https://wasabeef.jp/android-gradle/
http://stackoverflow.com/questions/38702032/android-studio-gradle-refresh-failed-could-not-find-com-android-tools-buildg
で、build.gradle に
jcenter() を追加したのだがうまくいかない。
調べていくと、
mavenCentral() が build.gradle 以外にもあった。なので全部に jcenter() を追加したらうまくいった。2016年7月16日土曜日
cordova: 'Could not find any version that matches com.google.android.gms:play-services-gcm:+.' で build に失敗したら
初めての cordova 案件が数か月放置された cordova のプロジェクトをメンテ。
まずは環境を作り。こちらのページを参考に Mac に cordova 環境を構築。Android、iOS ともに空プロジェクトを作って build が成功するところまでできた。
続いてターゲットのソースを git からクローンして build。Android も iOS も失敗。まずは Android から調査開始。
最初は SDK が足りないということで SDK Manager から追加して終わり。次のエラーが
'Could not find any version that matches com.google.android.gms:play-services-gcm:+.'
ということなのだが、 Google play services は追加済。調べていくと Google Repository も必要ということで追加したのだが、変わらず。
あれこれ調べていくうちに、どうもあるべき場所にあるべきファイルがない気がしてきた。そこで気が付いたのだが、いままでは Android studio から SDK Manaeger を起動していたのだが、ターミナルから SDK Manager を起動すると、案の定 Google Repository がインストールされていない。
こちらから Google Repository をインストールすると build に成功した。
もしかして、一部 SDK が複数個所に格納されているのかもしれない。
まずは環境を作り。こちらのページを参考に Mac に cordova 環境を構築。Android、iOS ともに空プロジェクトを作って build が成功するところまでできた。
続いてターゲットのソースを git からクローンして build。Android も iOS も失敗。まずは Android から調査開始。
最初は SDK が足りないということで SDK Manager から追加して終わり。次のエラーが
'Could not find any version that matches com.google.android.gms:play-services-gcm:+.'
ということなのだが、 Google play services は追加済。調べていくと Google Repository も必要ということで追加したのだが、変わらず。
あれこれ調べていくうちに、どうもあるべき場所にあるべきファイルがない気がしてきた。そこで気が付いたのだが、いままでは Android studio から SDK Manaeger を起動していたのだが、ターミナルから SDK Manager を起動すると、案の定 Google Repository がインストールされていない。
こちらから Google Repository をインストールすると build に成功した。
もしかして、一部 SDK が複数個所に格納されているのかもしれない。
2016年4月15日金曜日
nexus9:OpenGL GL_TRIANGLE_STRIP の不可解な動作
Android アプリを開発中、手持ちの3機種ではそれなり安定して動いていたアプリが、出先で借りた nexus9(6.0.1 MMB29V) では動かなかった(「問題が発生したため、~を終了します。」)
ご厚意で nexus9 をお借りし、自宅で調べてみると、見たことのないメッセージを出して止まっていた。
> 04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glCurrentPaletteMatrixOES in procAddrs table
>04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glLoadPaletteFromModelViewMatrixOES in procAddrs table
>04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glMatrixIndexPointerOES in procAddrs table
>04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glWeightPointerOES in procAddrs table
>04-15 15:20:42.804 11046-11534/sample.ble.sensortag A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 11534 (GLThread 367)
ネットで調べてみたが、役に立つ情報が見つからない。ブレークポイント仕込んで調べていくと、OpenGL で直線を引くための class の、直線を引くメソッドで止まっていた。
直線は、三角形を二つ並べることで描いていて、コード的には
(略)
float squareCoords[] = {
(float) (xs - (Math.cos(angle) * width / 2)), (float) (ys + (Math.sin(angle) * width / 2)), 0, // top left
(float) (xs + (Math.cos(angle) * width / 2)), (float) (ys - (Math.sin(angle) * width / 2)), 0, // top right
(float) (xe - (Math.cos(angle) * width / 2)), (float) (ye + (Math.sin(angle) * width / 2)), 0, // bottom left
(float) (xe + (Math.cos(angle) * width / 2)), (float) (ye - (Math.sin(angle) * width / 2)), 0 // bottom righ
};
short drawOrder[] = {0, 1, 2, 3}; // order to draw vertices
(略)
gl.glDrawElements( // draw shape:
GL10.GL_TRIANGLE_STRIP,
mDrawOrder.length, GL10.GL_UNSIGNED_SHORT,
drawListBuffer);
はたと思うところあって、GL_TRIANGLE_STRIP を GL_TRIANGLES に変更し、drawOrder[] もそれに合わせて {0, 1, 2, 1, 2, 3} に変更したところ、エラーは出なくなった。GL_TRIANGLE_STRIP で、三角形を二つしか書かないのは少なすぎるのだろうか。
円を描くところでは、glDrawElements() に GL10.GL_TRIANGLE_STRIP を指定して問題なく動いているのだが...。
ともあれ、問題を一つ越えられた ><
ご厚意で nexus9 をお借りし、自宅で調べてみると、見たことのないメッセージを出して止まっていた。
> 04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glCurrentPaletteMatrixOES in procAddrs table
>04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glLoadPaletteFromModelViewMatrixOES in procAddrs table
>04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glMatrixIndexPointerOES in procAddrs table
>04-15 15:20:42.739 11046-11534/sample.ble.sensortag D/NvOsDebugPrintf: WARNING: Couldn't find glWeightPointerOES in procAddrs table
>04-15 15:20:42.804 11046-11534/sample.ble.sensortag A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 11534 (GLThread 367)
ネットで調べてみたが、役に立つ情報が見つからない。ブレークポイント仕込んで調べていくと、OpenGL で直線を引くための class の、直線を引くメソッドで止まっていた。
直線は、三角形を二つ並べることで描いていて、コード的には
(略)
float squareCoords[] = {
(float) (xs - (Math.cos(angle) * width / 2)), (float) (ys + (Math.sin(angle) * width / 2)), 0, // top left
(float) (xs + (Math.cos(angle) * width / 2)), (float) (ys - (Math.sin(angle) * width / 2)), 0, // top right
(float) (xe - (Math.cos(angle) * width / 2)), (float) (ye + (Math.sin(angle) * width / 2)), 0, // bottom left
(float) (xe + (Math.cos(angle) * width / 2)), (float) (ye - (Math.sin(angle) * width / 2)), 0 // bottom righ
};
short drawOrder[] = {0, 1, 2, 3}; // order to draw vertices
(略)
gl.glDrawElements( // draw shape:
GL10.GL_TRIANGLE_STRIP,
mDrawOrder.length, GL10.GL_UNSIGNED_SHORT,
drawListBuffer);
はたと思うところあって、GL_TRIANGLE_STRIP を GL_TRIANGLES に変更し、drawOrder[] もそれに合わせて {0, 1, 2, 1, 2, 3} に変更したところ、エラーは出なくなった。GL_TRIANGLE_STRIP で、三角形を二つしか書かないのは少なすぎるのだろうか。
円を描くところでは、glDrawElements() に GL10.GL_TRIANGLE_STRIP を指定して問題なく動いているのだが...。
ともあれ、問題を一つ越えられた ><
2016年2月24日水曜日
古いサンプルを Android Studio で動かす方法
Android developer (google の公式) の Displaying Graphics with OpenGL ES にある sample (OpenGLES.zip) の HelloOpenGLES10 を Android Studio で動かそうとして、File -> New Import Project でインポートしたのだが
- Error:A problem occurred configuring project ':app'.
- > failed to find target with hash string 'android-4' in: C:\Users\mugi\AppData\Local\Android\sdk
- <a href="openAndroidSdkManager">Open Android SDK Manager</a>
なるエラーが出てきた。
結局、
・ SDK Managear の SDK Tools タグから Android SDK Build Tools をインストール
・HelloOpenGLES10\app\build.gradle の compileSdkVersion を 4 から 21 に変更
でビルド -> 実機動作までできるようになった
- Error:A problem occurred configuring project ':app'.
- > failed to find target with hash string 'android-4' in: C:\Users\mugi\AppData\Local\Android\sdk
- <a href="openAndroidSdkManager">Open Android SDK Manager</a>
なるエラーが出てきた。
結局、
・ SDK Managear の SDK Tools タグから Android SDK Build Tools をインストール
・HelloOpenGLES10\app\build.gradle の compileSdkVersion を 4 から 21 に変更
でビルド -> 実機動作までできるようになった
2016年1月20日水曜日
BLE Advertise の GAP(Data Type Value) の指定方法
いろいろなコードを参考にしながらいろいろ試して、BLE Advertise はできるようになったのだが、GAP の Data Type Value (AD Type) がどうしても設定できない。
参考にしたコードによって Data Type Value (AD Type) の値は違うのだが、なぜ違っているのがわからなくてかなり調べた。調べた結果...
AdvertiseData.Builder のメソッドで付加される AD Structure
AdvertiseSettings.Builder のメソッドで付加される AD Structure
参考にしたコードによって Data Type Value (AD Type) の値は違うのだが、なぜ違っているのがわからなくてかなり調べた。調べた結果...
- Data Type Value (AD Type) は直接指定できない
- AdvertiseData.Builder,AdvertiseSettings.Builder のメソッドを呼ぶことで、Advertise に特定の AD Structure を追加できる
- Advertise に AD Structure を追加する方法はこれしかないらしい(API level 21:Android 5.0)
- 結局、Data Type Value (AD Type) を設定するのは、AdvertiseData.Builder,AdvertiseSettings.Builder のメソッドを選ぶこと
AdvertiseData.Builder のメソッドで付加される AD Structure
Data Type Value | Data Type Name | Method |
---|---|---|
0x03 | Complete List of 16-bit Service Class UUIDs | addServiceUuid(ParcelUuid serviceUuid) |
0x09 | Complete Local Name | setIncludeDeviceName(boolean includeDeviceName) |
0x0A | Tx Power Level | setIncludeTxPowerLevel(boolean includeTxPowerLevel) |
0x16 | Service Data - 16-bit UUID | addServiceData(ParcelUuid serviceDataUuid, byte[] serviceData) |
0xFF | Manufacturer Specific Data | addManufacturerData(int manufacturerId, byte[] manufacturerSpecificData) |
AdvertiseSettings.Builder のメソッドで付加される AD Structure
Data Type Value | Data Type Name | Method | note |
---|---|---|---|
0x01 | Flags | setConnectable(boolean connectable) | connectable:true の時だけ Flags:0x02(LE General Discoverable Mode)のAD Structureが入る connectable:false だと挿入される AD Structure はなし |
2015年12月14日月曜日
Nexus5 で、bluetooth LE の advertising を送出させる方法
経過:
思うところあって、いわゆる「Beacon」を使いたくなった。調べていくと、bluetooth LE の advertising という機能を使っているらしい。iOS は 7 以降で使え、Android は 4.3 以降で受信、5.0 以降で送信に対応とあった。
手元に Android 6.0 までアップデートした Nexus5 があったので、いろいろと試したのだが、どうもうまくいかない。
さらに調べていくと、Android L の途中までは動いていたようなのだが、2014/10 の中頃のバージョンから動かなくなってしまったらしい。
https://code.google.com/p/android-developer-preview/issues/detail?id=1570
で、google の中の人から「Nexus 4/5/7 は、チップセットの問題でサポートしないよ」との書き込みもあった。Nexus って Android の公式マシンなのに ><
https://code.google.com/p/android-developer-preview/issues/detail?id=1570#c52
ログを最後の方まで調べていくと、Nexus 5 + Android 5.1.1 で動かすためのパッチを発見!!
https://code.google.com/p/android-developer-preview/issues/detail?id=1570#c104
ということで、ダメ元で試してみたら、advertising の送出に成功した。
以下に、備忘録を兼ねて、メモを公開。
思うところあって、いわゆる「Beacon」を使いたくなった。調べていくと、bluetooth LE の advertising という機能を使っているらしい。iOS は 7 以降で使え、Android は 4.3 以降で受信、5.0 以降で送信に対応とあった。
手元に Android 6.0 までアップデートした Nexus5 があったので、いろいろと試したのだが、どうもうまくいかない。
さらに調べていくと、Android L の途中までは動いていたようなのだが、2014/10 の中頃のバージョンから動かなくなってしまったらしい。
https://code.google.com/p/android-developer-preview/issues/detail?id=1570
で、google の中の人から「Nexus 4/5/7 は、チップセットの問題でサポートしないよ」との書き込みもあった。Nexus って Android の公式マシンなのに ><
https://code.google.com/p/android-developer-preview/issues/detail?id=1570#c52
ログを最後の方まで調べていくと、Nexus 5 + Android 5.1.1 で動かすためのパッチを発見!!
https://code.google.com/p/android-developer-preview/issues/detail?id=1570#c104
ということで、ダメ元で試してみたら、advertising の送出に成功した。
以下に、備忘録を兼ねて、メモを公開。
登録:
投稿 (Atom)