たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 10660
どうもこんにちわ。Pixel 10 Pro Fold
届きました、初!!!!!!!フォルダブル?折りたたみ?スマホです。
こわいのでケース買います!純正のは高いので適当にアマゾンで買おうと思いますが、そういえばわたしプライム会員じゃ無いんですよね。without プライム会員
なのでいつも送料無料になるまでなにか探しています。最近だと実物写真取るのに背景が映ると嫌なのでちっちゃい撮影スタジオみたいなのを買いました。グリーンバック
それで今回は、、、会社のチームメンバーにプライム会員!!!がいらっしゃったので代わりに買ってもらいました。
なお商品の値段だけ払った模様。プライム古事記ですよねそうです。
プライム
はや~~~い、
プライム会員、お急ぎ便とか無料配送とか抜きにしても確か映画とかドラマが見れるらしい。
わたしもガリレオの映画(3つ目のやつ)まだ見れてない。あとすみっコぐらしも絵本のやつ良かったから他のも見たい。
めちゃいいかんじです。ヒンジ?開いたときに収納される部分も守ってくれるやつを買いました。高いからね仕方ないね。
折りたたまない方の画面の保護フィルムは自分で貼りたかったのですが、折りたたみスマホのケースって大体こっちの画面も守ってくれるんですよね。ガラスフィルムみたいなのが一体になってる。保護フィルム見たく粘着するんじゃなくてはめるだけ。
多分画面を覆うようにはめ込む設計にしないと落っこちちゃうからだと。どうしても縁?バンパー?だけなら両面テープ。
でもどうしてもフィルムを使いたかったので、、、ガラスを割りました。でもほんのちょっとだけ怪我したのでおすすめしません。
バンパーだけじゃ落っこちちゃうので付け焼き刃ですが両面テープを貼りました。怪我したけどさらさらのアンチグレアフィルムが使えて満足(いつもPDA工房
のPerfect Shield
を買ってる)
最後に初感
めちゃいいです。おりたたみ。多分フリック入力のが早いんだけど、開いたときのローマ字が良い。Gmail
とかGoogle Keep
とかGoogle マップ
がでかい画面対応してていいな~、アダプティブレイアウト作りたいな~気分になりました。layout.xml
じゃないしそんな難しくないと見込んでるけどどう?
あと、これならスマホでMarkdown
も夢じゃないのでは!?!?
以上です。本編行くぞ!!!
Chrome
ブラウザを使ってAPK
ファイルをインストールする
近い将来、APK
ファイルを直接配信する開発者に対しても、Google
は開発者登録を強制する。
わるさをするAPK
を繰り返し配信し続ける奴らを締め出したい。のが目的らしい。
身元を特定できるようにして、もうインストール出来ないようにするらしい。別にアプリを審査するわけではなく、ただ前科がある開発者かどうかを見るだけっぽい。
いやめんどくせえな、君たちがGoogle Play
製品版のハードル引き上げたんだろうに、次はこれかよ。
Apple iPhone
とは違うある程度開かれたプラットフォームを期待してた人は残念だし、APK
ファイルを配るだけなのにGoogle
へ個人情報を渡さないといけない。
macOS
もサードパーティアプリに対してが、どのルートで配布するにしてもApple
に登録が必要。これを公証
とか言うらしく、macOS
のゲートキーパー機能が公証したアプリか確認しているそう。
これと同じことがAndroid
にも来る。。しかも回避策は後述するadb install
以外にない。
なんでGoogle
に登録しないといけないんだ。自分で買ったんだから自由にできる選択があるだろうよ。
というかこれが執行されるとGoogle
の力が強くなりすぎてしまう。Google
にとって都合が悪いアプリを難癖つけて配信停止に追いやることだって技術的には出来る。
それだけの権限があるんだけど。
セキュリティだけであればGoogle Play Protect
があるし、そっちに全振りすればいいと思う。
API
が登場し始めています。開発者向けとしてADB
コマンドを利用すると回避できるみたいです。
ただADB
コマンドを利用するためには、AndroidStudio
を入れるか、platform-tools
を単品で入れるかが必要で、開発者でなければ厳しい。
さて、話変わって、Google
が作ってるChrome ブラウザ
の話でも。
Chrome
(とその系列)には、WebUSB API
があります。これは、フロントエンド開発者向けに、ウェブサイト内でUSB
で接続したデバイスと通信したいな~ってときに使えます。
(通信したい時がほとんど無いと思うんだけど、、、)
それこそ、ADB
コマンドのようなUSB
接続をするようなアプリを、ブラウザだけで作ることが出来ます。
知ってる限り、Google Pixel
端末へAndroid OS
を入れ直す(焼く)(Flash
する)ためのウェブサイト
で使われてます。まじでChrome
だけで出来る。
API
はChrome
だけで、Safari
とFireFox
ではこのWebUSB
は利用できません。CanIUse
もChrome 系列
のみになっている→https://caniuse.com/webusbStandards Positions
見たけどやっぱりそれぞれ反対してる。
WebUSB API · Issue #100 · mozilla/standards-positions
Request for Mozilla Position on an Emerging Web Specification Specification Title: WebUSB API Specification or proposal URL: https://wicg.github.io/webusb/ Caniuse.com URL (optional): https://caniu...
https://github.com/mozilla/standards-positions/issues/100
WebUSB API · Issue #68 · WebKit/standards-positions
(Re-)request for position on an emerging web specification WebKittens who can provide input: marcosc@apple.com Information about the spec Spec Title: WebUSB API Spec URL: https://wicg.github.io/web...
https://github.com/WebKit/standards-positions/issues/68
スマホアプリとかはUSB
にアクセスしたところで、審査があるので最低限担保されるかもだが、Web
ではそうはいかない。ユーザーに委ねるのはあまりにも危険。
まあ使い道が思いつかない。
今回みたいに、本来は開発者向けに使われるadb install
を何故かパソコンのブラウザだけで出来るように上方修正する。みたいな抜け道としてしか使われなくない?
調べた:マイコンボードに書き込むのに使ってるらしい。Web
ブラウザでコード書くのかな。GoogleDocs
みたいにめちゃめちゃ作り込まれてないとWeb
ベースのIDE
は厳しい気が。
ユーザーが騙されてダイアログでUSB
デバイスを接続してぐちゃぐちゃにされる未来しか無いんだけど気のせい?
adb install
経由では免除されると、また、WebUSB
を使えばADB
コマンドの実装が出来そう、、、
あれ、これ、パソコンのブラウザだけでAPK
サイドローディング出来ませんか?adb
のセットアップとか無しで。
いいんですか???もちろんパソコンへスマホを接続する必要がありますが。
なんというか、Safari / Firefox
に従っておけば抜け道ができることなんて無かったの、かも。(いうほど抜け道か?)
これがNPM ライブラリ
っぽく使えそう。
あと先駆者さんがいました、
Chu!人のネタのパクリでごめん(そういえば HoneyWorks 原点回帰した!??!)
冒頭の画像を再掲しますが、、、
ADB
の実装は↑のライブラリを使っているだけです。
あとは適当にNext.js (static export) + TailwindCSS + TypeScript
です。WebUSB
はもちろんブラウザ JavaScript
のAPI
なので、Next.js
使ったけどクライアントコンポーネント
です。
ボタンを押してWebUSB API
経由で端末と接続し、APK
ファイルを選択するとインストールが開始されます。.apk
ファイルをAndroid
へインストールするために、もうあの黒い画面、コマンドプロンプト・PowerShell
のようなターミナルさんに一切触れること無くインストールできます。
ほんとにパソコンにはChrome
が入っていればそれだけで良くなった。
なんか実装が間違っているのか、常にUSB デバッグを許可しますか?
のダイアログがでています。localStorage
的なのに書き込んで永続化する必要があったかもしれません。
作った感想だよ~
git clone
したあと、
デモサイトを消しました。ライブラリ単品で欲しかったので・・・
テストを消しました。すいません。
あと今のTypeScript
で通るようにArrayBufferLike
のあれこれを直しました、DataView
のところをDataView<ArrayBuffer>
とジェネリクスの型を渡すようにしました。
とりあえず動いてる。
あとWeb Crypto API
が使えなかった?ためか代替ライブラリを使っていたのですが、ネイティブのWeb Crypto API
で動いてそうだったのでライブラリを消しました。
この代替ライブラリはC言語?
のコンパイル処理が存在してて、そのためにはWindows
の場合は多分VisualStudio
とかを入れる必要があって・・・
こんな感じに、npx tsc --noEmit
が激怒長エラーメッセージが消えればおっけーです。型が合わないエラーメッセージが長いんよな・・・
最後にnpm i ./gitcloneしたときのパス
すれば、ローカルにあるnpm
パッケージを入れることが出来ます。
どうでもいいですがnpm i githubのリポジトリurl
もいけます。
application/vnd.android.package-archive
!!!
<input
id="apk_select"
className="px-5 py-2 bg-blue-200 rounded-full"
type="file"
accept="application/vnd.android.package-archive"
onChange={ev => {
const apkFile = ev.currentTarget.files?.item(0)
}} />
GoogleChromeLabs/wadb
をつかって
まずは接続に必要なインターフェースを実装します。よくわからないのでデモからコピペしています。
class MyKeyStore implements KeyStore {
private keys: CryptoKeyPair[] = [];
async loadKeys(): Promise<CryptoKeyPair[]> {
return this.keys;
}
async saveKey(key: CryptoKeyPair): Promise<void> {
this.keys.push(key);
console.log('Saving Key' + key);
}
}
つぎは接続箇所。
呼び出すと、パソコンのブラウザでUSB
に繋いだAndroid
端末を選ぶダイアログ?が出るので選んで。Android
端末側ではUSB デバッグを許可するか?
のダイアログで許可してあげてください。
const adbClient = useRef<AdbClient>(null)
const transport = useRef<WebUsbTransport>(null)
/** 接続を開始する。ユーザーは開いたダイアログでデバイスを選択すること */
async function connect() { // 近い将来 React Compiler が登場するので、手動で useCallback するのはやめる、JetpackCompose の StrongSkippingMode みたいな
const options: Options = {
debug: true,
useChecksum: false,
dump: false,
keySize: 2048
};
try {
const keyStore = new MyKeyStore()
transport.current = await WebUsbTransport.open(options)
adbClient.current = new AdbClient(transport.current, options, keyStore)
const info = await adbClient.current.connect()
// info に接続した端末の名前とかが入ってる
} catch (e) {
// TODO err
}
}
次にAPK
ファイルを転送+インストールする処理。いままでadb install
と言っていましたが、
正しくはapk
ファイルをAndroid
端末に転送して、そのあとそこからインストールするコマンドを叩く。が正解です。
apkFile
は<input>
のonChange = { ev => ev.currentTarget.files?.item(0) }
の値です。HTMLInputElement
に生えてますよね。
try {
// 転送する
const apkBinary = await apkFile.arrayBuffer()
const blob = new Blob([apkBinary])
const tempApkFilePath = `/data/local/tmp/${Date.now()}_android_apk_sideload_web.apk`
// 1_000_000 にした途端動かなくなった...
// いい感じにバイト配列を分割して転送してくれるそう
await adbClient.current?.push(blob, tempApkFilePath, "0755", 5_000)
// インストールする
await adbClient.current?.shell(`pm install ${tempApkFilePath}`)
// 消す
await adbClient.current?.shell(`rm ${tempApkFilePath}`)
} catch (e) {
// todo えらー
}
WebUSB
の技術的な制約なのか何なのかはよくわかりませんが、一度に遅れるバイトには制限があるらしく、このライブラリでは分割して送ってるみたいです?
手元では1_000_000
したら0バイト
のファイルが転送されていました。ギリギリで生きるのをやめます。
あとはインストールコマンドと削除。
よくみるとadb install
とかadb devices
とかのコマンドではなく、adb shell した後にするコマンドを入れる必要がありますね。adb shell am start -d https://example.com
みたいな。
切断するなら。
try {
await adbClient.current?.disconnect()
await transport.current?.close()
} catch {
// 物理的に引っこ抜いたとか...
}
CloudFront
+S3
でサイトを公開したのですが、これからもこの構成で公開するとなるとCloudFormation
的なのを作っておこうと思い作ってたんですが3日ぐらいかかりました。
使うかわからんものに・・・
あーあ、マネジメントコンソール(ブラウザ)をポチポチしてれば1時間くらいだったのに。
悪口ばっかりなのでもう帰ってもらって結構です。
サイドローディングであーだこーだ言ったところで大多数はサイドローディングしないんだから極論どうでもいいんだよな。
私としてはすでにPlayConsole
に個人情報を渡しているからなあ、それにともないPlayStore
で本名だけは開示されてるし、、、学生とかだとクソきついと思う
自分で買ったスマホなんだから自由にさせてくれて良くない?Google Pixel 10 Pro Fold
、26万したんだけど。
なんで26万払って自分でアプリを入れるかの選択ができないの?Android 12
にアップデートしてからAndroid/data
フォルダが見れなくなった件も、今回の件も、返金の準備したほうが良いんじゃないかな Google さん?
adb install
以外は開発者認証済みのAPK
が必要になり、adb
以外の回避策はない模様。GooglePlay 開発者サービス
の一つとして実装されると思うので、ユーザーは無効にするとかは出来ない気がする。
開発者サービスを入れない選択はカスタム ROM
を入れるときにGoogle なし
のを焼くとか、Root
権限でなんとか出来るのかもだけど、どっちにろブートローダー
がアンロックできないのでやっぱり何も出来ない。通信キャリア許せねえよShizuku
でなんとかなるもんなんですかね?希望はある
悪意あるアプリの拡散を防ぐと言っているが、通報を受け付ける仕組みなのか、AI
か何かが検知して勝手にアカウントをBAN
にするのかは調べたけど分からなかった。
Chromeからapkをダウンロードする機能を消せば良くない???こんな極論に走るよりも
applicationId
が被った場合はダウンロード数が多いほうがゲット出来る。
あとこれは去年くらいにあった製品版の制限
のが近いけど、Android
がこのザマならわざわざCompose Multiplatform
とかのマルチプラットフォームなんか使わずに、
ファーストは諦めて大人しくiOS
だけ作ってれば良い流れになりませんか?流石にそんなこと無いか。
カード会社の攻撃のせいでえっちなのを取り締まってるみたいに、アプリを全部握ったら思わぬ外部からの攻撃で消されることにもなりそう。
下手に握ってると開発者登録があるのに Google はなんで野放しにしてたんだ!!!
とかいちゃもんつけられそうじゃないですか?やっぱやめようよ。
仮にAPK
配布のための開発者アカウントも、PlayConsole
もBAN
されたら一生 Android アプリを配信できないってことで合ってる?
恩赦は?
PlayConsole
の方では、携帯電話の契約みたいにeKYCみたいに自分の顔を撮影するやつは要求されないので、誰かの個人情報を入手できれば作れちゃいそうなんだけど。eKYC
相当を用意するとも到底思えない。負担すぎるでしょ。Play Console の本人確認をした - たくさんの自由帳
https://takusan.negitoro.dev/posts/play_console_developer_account_verfy/
アプリストアが泣かず飛ばずだったWindows
を見たのか、どうしてもアプリストアを手放したくない。が、今日、それを各国は許さない。だからせめてものの負け惜しみだと思ってる。
先述したけど、これが執行されるとGoogle
は都合が悪いアプリを権力行使で利用不可に出来る。それくらいの力がある。インストールするアプリはすべて申請が必要になるので。Google
が強くなりすぎてしまう。
強くなりすぎてしまった場合、もし仮に、
代わりのアプリストアが登場した時、アプリの審査はそのアプリストアが担当するべきだが、これに加えて何故かGoogle
が首突っ込んでくることになる。代替アプリストアなのにGoogle
が許さなければ配信できない。
Google
の力が強くなりすぎてしまう件は以前に似たようなことがありますUncomfortable Questions About App Signing
https://commonsware.com/blog/2020/09/23/uncomfortable-questions-app-signing.html
PlayConsole
へ審査のためにアプリをアップロードする際、APK
ファイルからAAB
を要求するようになりました。AAB
ファイルが.zip
ファイルみたいになってて、Google
側でzip
からスマホ向け
、タブレット向け
や、C++
があればARM 64bit
、x86_64
それぞれのAPK
を生成します。Android
は引き続きAPK
を要求するので、AAB
から作る必要があります。スマホ向け
をダウンロードすればタブレット向け
のレイアウトが不要になるので通信量を節約できていいじゃん。ってなるんですが、大きなセキュリティの問題が残っていて、それは今日でもなお使われています。.zip
からAPK
を作る際、もちろん署名をします。署名をすることで、悪さをする同じアプリに擬態しても(applicationId
をパクっても)署名が合わないので更新がブロックされるって仕組みです。AAB
からAPK
を作る作業はGoogle
側がやると言いました。これに伴い、Google
がアプリ毎に署名鍵を作ってGoogle
が署名をします。次回以降も署名するためにGoogle
が保管します。Google
ですね。彼らは更新が成功する署名鍵を持っているため、正規の開発者からもらったアプリのコードを書き換えたとしても、そのまま署名してしまえば、誰にも改ざんがバレずにアプリの配信ができてしまいます。Google
は自分自身が勝手に変更したり配布することは無いと言いました。先述の通り不可能ではなく、やろうと思えば出来るはずなので無い。don't
であって、can't
とは言っていない。Uncomfortable Questions About App Signing
https://commonsware.com/blog/2020/09/23/uncomfortable-questions-app-signing.html
今回も施行されてしまえば強い力を持つことになるので、このようにcan't
ではなくdon't
の声明が出る。のかは不明です。