Android端末でGoogle Play開発者サービスのアップデートをアンインストールする方法
Google Play開発者サービスのアップデートをアンインストールする方法(工場出荷時のバージョンに置き換える方法)について説明しています。
Google Play開発者サービスについて
Google Play開発者サービスは、Androidアプリが使用するコア機能のいくつかをサポートするもので別に開発者向け機能というわけではありません。古いバージョンを使用しているユーザーもいるかもしれないのでアプリ内でチェックする必要があります。
古いバージョンでのアプリの挙動を確認したい場合は、開発者サービスのアップデートを削除=アプリを出荷時状態まで戻すことで近い状態にすることができます。
ただ、上で述べた通りいろいろなアプリが開発者サービス内の機能に依存しているので、アップデートのアンインストール後にエラーが発生することが想定されます。
Google Play開発者サービスのアップデート削除方法
- 「設定」>「アプリ」>「Google Play開発者サービス」を開く
- 「アップデートのアンインストール」をタップする
- システムメッセージに同意する
Tips
- このフローは一部のアプリによって中断されることがある。(例:Androidデバイスマネージャ、Google Pay)この場合、これらのアプリを無効にした後にアンインストールを実行できる。(手での有効化必須)
- 日本語だと「Google Play開発者サービス」だけど英語での正式名称はGoogle Play services
- Marshmallow以降では右上のケバブをタップするとアップデートのアンインストールが表示される。
Android実践プログラミング 現場で生まれた設計パターン
- 作者: TechBooster
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/17
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: TechBooster
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/17
- メディア: Kindle版
- この商品を含むブログを見る
Bluetooth機器がサポートしているプロファイルを調べる方法(Mac)
Note: このエントリはHow to Know That Your Bluetooth Device Supports Which Profiles (英語)を和訳したものです
半月くらいAndroidアプリのBluetooth接続に関する機能のテストをしていて、私物のBluetooth機器がサポートしているプロファイルを知りたいという状況になったので、MacとBluetooth機器をペアリングして調べる方法を書いておきます。
Bluetoothのプロファイルについて
「Bluetooth機器がサポートしているプロファイル」の意味がわかる人はこの部分を読まなくていいです(私自身が理解するのに時間がかかったので書いておきます)。
雑に言うと、Bluetooth機器は用途に応じて接続先の機器をコントロールします。ヘッドセットなら「音声を聴く」「音量を操作する」「マイクで音声入力をする」などです。
こういったコントロール方式=プロファイルが多く規定されていますが、その中には最終的な動作がカブっているものも多いです。上で挙げたヘッドセットの「音声を聴く」という機能に限定して言えば、大抵のヘッドセットはHSP (Headset Profile)をサポートしていますが、新しい機器であればそれに加えてA2DP (Advanced Audio Distribution Profile)をサポートしていることがあります。
接続先となるアプリケーションの実装がプロファイルごとに異なる場合「古い機器で動かない」ということも起こり得ます。
参考:Traditional Profile Specifications | Bluetooth Technology Website
MacからBluetooth機器がサポートしているプロファイルを調べる方法
ここではMacOSのPCとBluetooth機器をペアリング設定した状態でサポートしているプロファイルを調べる方法を書いています。Windowsでもほとんど同じ手順で調べることができるようです。
参考:Bluetooth デバイス プロファイル サポートの詳細情報を得る方法
システムレポートの「ハードウェア」の下に「Bluetooth」という項目があります。一番上が本体の仕様で、その下にペアリングされている機器の情報が並んでいます。
もちろんそれぞれの機器のマニュアルを参照することがベストですが、イヤホンなど安価な小物の場合失くしやすいですしそもそも載っていないということもあるので、そういうときは試してみてください。
【Android】続・端末標準の電話機能でSIPを使う方法(受信・送信)【GalaxyS7】
この前Nexus5(とZenFone4)でのSIP電話の設定から通話までをまとめたが、Galaxy S7のSIP設定で2時間近く吹っ飛んだので書く。
これを読みにきた人はSamsungに対する何かそのような気持ちを募らせていることと思うが、とりあえずこの前書いたわりと標準的なAndroid端末での記事を読んでからこれを読んでほしい。
description
SMARTalkとかChiffonみたいなサードパーティアプリを使わず、050から始まる電話番号も使わず、Android端末Galaxy S7の電話機能でSIP電話を受ける・かける方法。
スクショはGalaxy S7 (Android 7.0)のものを掲載。
overview
Galaxy S7にSIPアカウントを割り当てる
ZenFone4は親切に、Nexus5も余計なことをせず見せてくれる通話アカウント画面だが、Galaxyシリーズの場合当該Activity(com.android.phone.settings.PhoneAccountSettingsActivity
)を直接叩くことでやっと開ける。
特定のActivityとかServiceを直接起動するアプリはいくつかあるらしい。ここではQuickShortcutMakerを使った方法を紹介する。
- QuickShortcutMakerを起動する
Phone
(com.android.phone)を探すPhone
の中のPhoneAccountSettingsActivity
(com.android.phone.settings.PhoneAccountSettingsActivity)を探すtry
をタップしてActivityを開く
あとは他のAndroid端末と同じ(多分)
参考サイト(英語)
SIPアドレス宛てに電話をかける
他のAndroid端末だと「連絡先(Contacts)」のカードに「SIP」という欄があって、そこからSIP電話をかけることができるんだけどGalaxyシリーズはそれがない。ではどうするかというと普通に電話番号欄にuser@example.com
みたいな文字列を登録する。
で、それをやろうとすると入力制限(数字記号のみ)に引っかかるので、
- コピペするか
- 向こうからかけてもらって登録する
みたいな対応が必要になる。
tl;dr
Samsungの「どうしてもSIPを簡単に使わせたくない」という気持ちが垣間見える。つらい。
ゼロからはじめる ドコモGalaxy S7 edge SC-02Hスマートガイド
- 作者: 技術評論社編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/07/08
- メディア: Kindle版
- この商品を含むブログを見る
*.mdファイルを読み込んで整形してHTMLファイルに書き出すスクリプト
*.md
の内容をブロック要素ごとに分けて*.html
として出力するスクリプトを(けっこう前に)書いた。
description
*「利用規約とかライセンスとかのマークアップがアプリのAssetとサーバー上とで違うのdiff確認しづらくない?」
*「そのへんマークダウンで管理したいよね〜」
みたいな雑談が聞こえた後30分くらいで雑に書いた。
usage
npm install
してnpm test
すると、SAMPLE.md
の内容を元にSAMPLE.html
内の{{%}}
を置換するかたちでTEST.html
を生成する。
feature
マークダウンテキストをまるまるhtmlにパースして<body>
に突っ込むのではなく、ブロック要素に分けてパースするようにした。
dependency
- fs: ファイルのReadWriteはNode
- markdown.js: マークダウンテキストのパース
課題
あまりにも雑に書いたので実際に使うならなんかもうちょっと考える必要がある。
そもそもReactなりVueなり使えばいいのでは……と思ったけどそれだとアプリのAssetで使えないのか……
- 作者: David Mark Clements,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 2人 クリック: 4回
- この商品を含むブログ (5件) を見る
【QA】QAとして開発チームにお願いした4つのこと
このエントリではゴリゴリの開発者ではない人間が、QAとしてアプリケーション開発チームに参加した後、実際にチームメンバーにお願いした内容を紹介する。
※この記事は以下のエントリ(英語)を和訳・追記したものです
- 前提として
- 1. 開発者の事情は不必要に考慮したくない
- 2. テストの方法や質問への回答を明確に書いてほしい
- 3. フォーマットは守ろう
- 4. 変な質問をするかもしれないけど実装者を責めているわけではない
- 最後に
- tl;dr
前提として
書いた人のスペック
ここ数年仕事としてソフトウェア開発はしてなかったけど、個人的にHTML5+JSベースのツールを公開したりはしていた。
求人票に書かれていた条件は次のような感じで、アプリケーション開発に関する知識は求められていなかった。
- 日本語と英語でコミュニケーションがとれる
- 文章でバグの内容を説明できる
そこへたまたま
- アジャイル&GitHub/カンバン/チャットツールベースのプロジェクトを経験している
- GingerbreadかHoneycombくらいまでの古いAndroidアプリ開発の知識がちょっとある
- テストケースを自分で作れる
- MaterialDesign万歳
みたいなスキルセットで参加したので、1ヶ月ちょっと働いたあたりで「ちょっと待遇面について話そう」ということになった。そのときした話がこのエントリの元になっていて、待遇面の変化についてはまた別に書く。先に言っておくと時給が3割以上上がった。
どういう仕事をしているかというのはこの前別のブログに書いた。
読んでみて欲しい人
このエントリは次のような人にとって役に立つかもしれない。
- チームが大きくなってきてQAを雇いたいなーと思い始めたマネージャー
- すでにQAと仕事をしていて、実機を使ったテストを依頼する開発者
- 元々開発やってて初めてQAとしてプロジェクトに加わる人
1. 開発者の事情は不必要に考慮したくない
当たり前なんだけどユーザーの大半は開発側の事情を知らないし、考慮しようとも思わないので、QAとしてはそういう実際のユーザーの気持ちを尊重していきたい。
例えばバグを報告したときに「KitKatではそのAPI使えなくて〜」とか「実装するのめちゃくちゃ難しくて〜」みたいな開発者側の情報は書いてもいいけど、それよりも先に「バグなのか仕様上しょうがないのか」「直すのか直さないのか」を答えてほしいという気持ちがある。
メンバーに誠実であろうとしてロジックとか閾値とかOS仕様を説明したくなる気持ちはすごく分かる。分かるけど私は読み飛ばしていくからな(後述)。
2. テストの方法や質問への回答を明確に書いてほしい
結果的にたまたま偶然開発知識がある人間が参加してしまったけど、QAとして開発知識を持たない人間を雇う利点は客観的なブラックボックステストができるということだと思う。開発側の事情に忖度して「これ変だけど仕方ないか」って考え始めるともう人の手でわざわざ端末操作して目視で確認する意義がなくなる。
あと本来読まなくていいものを読んだり、確認しなくていいものを確認したりするようになると、限られた時間内で上げられる成果が小さくなるので極力やりたくない。
何人かで協力してバグを修正したり新機能を実装していく中で、「これは他のメンバーのために残しておいたほうがいい」と判断した情報をTrelloのカードに追記するのはすごくいいことなのでやってくれていいんだけど、私がいちいち「誰向けの情報か」を判断せずに読み飛ばせるよう、開発者向けの情報とQA向けの情報は明確に区別して記載してほしいというお願いをした。
3. フォーマットは守ろう
ここまでに挙がったことはフォーマットを守ってコメントを書けば達成できるので全然難しいことじゃない。
- 確認してほしい環境(弊社の場合DeployGateのビルドバージョン)
- 確認してほしい箇所
- どうなっていてほしいか(もしくはその逆)
動作確認に必要な情報って基本これだけなので、開発メンバーの間で共有しなければいけない話は<hr>
とか入れて区切るとかインデント下げるとか2秒でできる工夫をしてほしい。
以前はTrelloのカードにPull RequestのURLが貼ってあるだけみたいなカードでも動作確認していたんだけどあまりにも精神衛生によくないのと、純粋に効率が悪いので「今後はねーから!」宣言をした。これは具体的に言うと
- Pull RequestのMerge元のブランチ名を確認して
- ブランチ名から配布パッケージを探して
- Pull Requestのコメントを読んで再現手順を確認して
- 実機で動作確認をする
という手順で作業をすることになる。最初のステップで既にGitHubを使った開発知識がないと詰むし、PRに再現手順書いてるならそれカードにコピペするだけで私がリンク踏む必要なくなるよね?と念押しした。
ただ弊社環境、CIが止まってビルドされるまで時間がかかることがよくあるので、そういう場合はDeployGateの配布パッケージを書く代わりにブランチ名を書いてもらうようにした。
4. 変な質問をするかもしれないけど実装者を責めているわけではない
「変な質問」というのはほとんどが開発者にとって当たり前であることを確認するような質問で、もちろん実装者を責めているわけではない。実際にあった例でいうと「SMS送信の権限与えてないのにSMSに返信できるのはOKなの?」みたいな話。
人間は良くも悪くも慣れる生き物なので、ずっと同じ機能を実装していると慣れて見落とすことがある。「テスト用の文言を入れたままリリースしてユーザーに指摘される」みたいなミスは最悪だけどいろんな会社のいろんなプロダクトでよくある。そういうミスを防ぐためにPull Requestを送って複数人の目で確認してQAが実機で確認する、というプロセスを踏んでいるので、品質を上げるためだと思ってほしい。
最後に
デザイナーと開発者とQA、なんなら事務方を加えてもいいんだけど、みんな目指すべきゴールは「ユーザーの満足」なので、良いものができるように協力してやっていきましょう。
Android改善プログラミング (SHOEISHA DIGITAL FIRST)
- 作者: TechBooster,mhidaka
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/15
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
- 作者: 瀬戸直喜/株式会社ブリリアントサービス
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/05/25
- メディア: 大型本
- この商品を含むブログ (2件) を見る
tl;dr
この日本語版を書いていて思ったんだけど、
みんな目指すべきゴールは「ユーザーの満足」なので
最後のこの部分を見失いがちなプロジェクトが巷にはすごく溢れているんじゃないだろうか。リーダーとか営業とか役員とかホールディングスとか受注元とかの顔色を窺って「いかに無難にそのプロジェクトを終わらせるか」が目標になってしまうケースは今までたくさん見てきた。
なので、こういう「ゴールを見失わないチーム」にいられることはとても幸せなことだし、できれば世の中の全てのチームが(業種問わず)そうなればいいよねと思う。
もちろんこういう気持ちになれるのは金銭報酬とか拘束時間とかの待遇に納得しているからなので、そういう合意を取らずに綺麗な目標だけ押し付けてくる職場は当たり前だけどよくないと思う。
【Android】端末標準の電話機能でSIPを使う方法(受信・送信)
設定から送信までまとめて日本語で書いてあるエントリがあんまり見当たらなかったので書く。
description
SMARTalkとかChiffonみたいなサードパーティアプリを使わず、050から始まる電話番号も使わず、Android端末の電話機能でSIP電話を受ける・かける方法。
スクショはNexus5 (Android 6.0)のものを掲載。
overview
Android端末にSIPアカウントを割り当てる
Android端末をSIP電話の受信機にするにはSIPアカウントを割り当てる必要がある。
key | value |
---|---|
ユーザー名 | foo |
パスワード | bar |
ドメイン | example.com |
「foo@example.com」宛てのSIP電話を受信するための設定手順はだいたい以下の通り(例外多数)1。
- 「電話(Phone)」を開く
- 連絡先検索バーの「…」をタップ
- 「設定(Settings)」をタップ(→画像)
- 「通話(Call settings)」をタップ
- 「通話アカウント(Calling accounts)」をタップ(→画像)
- 「SIPアカウント(SIP accounts)」をタップ(→画像)
- 「SIPアカウント」一覧のヘッダの「+」をタップ(→画像)
- ユーザー名、パスワード、ドメインを設定して「保存(Save)」(→画像)
- 「通話アカウント」画面で「着信を受ける(Receive incoming call)」をオンにする
SIPアドレス宛てに電話をかける
「foo@example.com」宛てに電話をかける場合「連絡先(Contact)」にアドレスを登録してしまうのが多分一番早い2。
連絡先の「その他の項目(More fields)」に「SIP電話」の項目があるのでそこに「foo@example.com」を登録する。(→画像)
tl;dr
読まなくていい個人的にハマったところ
- ♯SIP ♯とは(→IP電話のプロトコルの一種だよ!)
- ドメインをタイポしまくる(→コピペするか他の人にも確認してもらおう!)
- 「着信を受ける」がオンになってない(→送信はできるけど受信はできないよ!)
- Wi-Fiがオンになってない(→インターネットに繋がってないと使えないよ!)
- 作者: Henry Sinnreich,Alan B. Johnston,阪口克彦
- 出版社/メーカー: オーム社
- 発売日: 2002/10
- メディア: 単行本
- 購入: 1人 クリック: 16回
- この商品を含むブログ (5件) を見る
【MONA】tipmonaを使う方法
仮想通貨界隈が焦げ付いている今日この頃ですが、@tipmonaを使った投げ銭を試してみたのでメモ
tipmonaの使い方
tipmonaはTwitterを使って投げ銭ができる仕組みで、送金以外にも残高参照などもろもろの機能をCIっぽく使うことができますが、TwitterのAPI制限もあるので実質使うのは送金の「tip」だけになりそう。
送金以外の機能はだいたいMonappyからでも可能です。
@tipmona tip @${screen_name} ${value}
@tipmona tip @deepgorikai 0.09 Monappy→tipmonaでの手数料分目べりしちゃいましたごめんなさい(;´∀`)
— wifeofvillon (@wifeofvillon) 2018年1月27日
@wifeofvillon さんから @deepgorikai さんにお届け物ですっ! つ[0.09mona]
— モナコインちゃんbot (@tipmona) 2018年1月27日
他のコマンドは公式ドキュメントを参照のこと。
Monappy⇔tipmona間のMONA移動
今回はMonappyでMONAを貸してくれる人を募り、Monappyで投げ銭してもらったMONAをtipmonaで返してみました。
今回引っかかったのは「Monappyとtipmonaのウォレットは別」という点でした。簡単な図を用意しましたが、Monappyで借りたMONAをtipmonaで返すには
- Monappy上で受け取ったMONAはMonappyのウォレットにプールされる
- Monappyから手数料0.01MONAを払ってtipmonaのウォレットに入金する
- tipmonaでMONAを送金する
という手順を踏む必要があります(必然的に0.01MONA目減りする)。
毎回約7円くらい目減りするというのもアレなので、ウォレット間のMONA移動はある程度MONAが溜まってからの方が良さそうな気がしました。
MONAの入手方法
MONAはbitbank.ccやbitFlyerで購入することもできるのですが、口座開設の身元確認に少なくとも1営業日はかかるので、1MONAくらいなら絵が描ける人はMonappyで投げ銭してもらう方が早い気がします。
↓実装中