Android開発質問スレ Part2
Web開発のトピックを分かりやすく解説してくれるところが大好きです!最近、EchoAPIを使ってAPIテストを行っており、このツールのおかげでワークフローがすごく簡素化されました。
組織にしてバーチャルオフィスにすれば免許証アップとかは必要なくなるのかな
バーチャルオフィス申し込んでるが、登記不可ってなんや。これでええんか
「対象年齢として18歳以上が設定されてますが、アイコンが可愛くて子供受けしそうだから子供向けアプリとして認定します。
なのに、子供向けアプリのガイドラインを満たしていないので、削除します。復活したければ修正して審査を受けよ」
みたいな理由で一方的に公開停止されたが、Gの社風が変わりすぎじゃないか?
ひどいなw
かわいくないアイコンに変えるしかないのか
アプリを別のアカウントに移行した場合に、Firebaseは前のプロジェクトのままでも動作するんですかね
海外でダウンロードできるのであれば該非書類用意するよう言われたけど本当ですか?
最近リモートのビルドを試していて、そのときにsshでポートをフォワードしてリモートから
ローカルにつながったデバイスにadbを使う方法を知ったのですが、
fastbootでも同じことはできますかね? fastbootでやっている話は見かけないような
Jetpack Compose やってみてるんだけど色の指定が Material3 になっていて
例えばダイアログ上のここのテキストの色を変えるのにどのプロパティにセットしたら良いのかとか分かりにくいんだけど
Material3 使わずに自分で個別に色指定した方が分かりやすくないっすか
ようつべ見ながらさわったら
Material3になってそのままで動かなくて時間とられたの思い出した
オフラインアプリなんだけどKotlinでWebViewに大きな配列データ渡すときって
JSON形式でファイルにして渡したほうが早い?
JavaScriptの関数の引数に配列データ渡す方法だと、どえらい時間かかるの。
chunkとかいうのも試したけどほとんど変化なし。
gradleでビルドしているアプリにJNIでライブラリのバイナリ(libA.so)をロードしたく、
プロジェクト内でjniLibsというフォルダを作りそこに置いたら、認識はされたようです
ですが、今度は実行時にlibA.soが依存しているlibBが見つからずエラーになります
というわけでlibBもjniLibsに置いてみたのですが、どうやら
- 元のライブラリはlibB.so.1という名前だった
- libB.so.1というファイル名だとjniLibsに置いてもアプリのビルド時に除外されるっぽい
(apkの中を見たときにlibB.so.1が入っていない)
- libB.so.1をllibB.soにファイル名変更するとビルド時に認識されるが、実行時にlibB.so.1
は未解決のまま
というわけで、明示的にlibB.so.1を指定してビルド時にapkに含まれるようにしたら
よさそうだと思いますが、どのようなgradleの指定にしたらいいかご存知の方はいますか?
共有ライブラリってファイル名じゃなくて中に含まれる関数名しか見てない気がする
違ってたらごめん
>>228 WindowsだったらWSLでubuntuとかいれてreadelfコマンドでsoファイルの依存関係が見れる
適当なubuntuのsoファイルを見るとこんな感じ
$ readelf -d /usr/lib/libnetpbm.so.10
.......
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000e (SONAME) Library soname: [libnetpbm.so.10]
AndroidStudioで作ったsoファイルも見れてこんな感じになっている
$ readelf -d ~/libfoo.so
.......
0x0000000000000001 (NEEDED) Shared library: [liblog.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x000000000000000e (SONAME) Library soname: [libfoo.so]
そのlibAとlibBの実際の依存関係もこれで確認できるだろう
調べてみるとAndroidは.so以外の名前の共有ライブラリファイルをサポートしていないみたいだな
ビルド時にパッケージングしてくれないだけじゃなくてくて、端末のランタイムがサポートしていないみたいな?情報が古いかもしれんが
だからライブラリそのものを作り直す必要があるんじゃないだろうか
libA.soを作るときにlibB.soを動的リンクするんじゃなくて、libB.aがたぶんあるだろうから、libA.soにlibB.aを静的リンクすれば解決する
皆さんどうもです
>>230 それで例えばNEEDEDの一つにlibc.so.6がありますがそれをロードする条件は
- SONAME が libc.so.6 で
- ファイル名も libc.so.6 である
ようなライブラリーがあれば読み込む、ということなのかな? と。しかし
>>231 >調べてみるとAndroidは.so以外の名前の共有ライブラリファイルをサポートしていないみたいだな
やはりそうなんですかね。それだと .so.6 とかはうまく組み込めなそうですね
>だからライブラリそのものを作り直す必要があるんじゃないだろうか
依存している全ライブラリのソースがあれば再ビルドしてまとめるという手はありますね
ふと思ったのは上の認識が正しければSONAMEをなんとか編集して .6とか取ればいいのかなと
だいぶハックの領域ですが。ただ、.6は本来必要があって付いているんでしょうが
NDKのドキュメントを見るといろんなクラスが定義されてて、native-activityだとか
そんなサンプルもありますが、
もしかして今ってC/C++だけで一通りアプリ(アクティビティ)やサービスを書けたりします?
manifestにはクラス名を書く必要があるだろうし簡単ではなさそうだよね
>>233 そのサンプルのnative-activityのドキュメントにAndroid APIレベル9以降って書いてある
LadybugからMeerkatにアップデートしたらステップーオーバーで変な位置に飛ぶ状態
Ladybugに戻しても同じ動作でキャッシュを削除しても変わらず
エクスポートして別の場所にインポートしたら動作が正常になってMeerkatでも大丈夫でした
キャッシュ削除以外で同様なコマンドありますか?
NE3っていう耳かきカメラなんだけどさ。
コパイロットに聞いたら対応してんのandroidのバージョン5以降からじゃね。っていうんだよね。
俺のandroid2.3.3でちょっとばかし古いんだ。
で、アプリって自作できないかなと。
最近アプリを更新公開したら以下の注意が出たのですが、自分のコードでは使ってない。
どうしたらよいのでしょうか?
お客様のアプリは、エッジ ツー エッジで非推奨の API またはパラメータを使用しています
エッジ ツー エッジおよびウィンドウの表示のために使用または設定している API またはパラメータの 1 つ以上が、Android 15 で非推奨になりました。お客様のアプリでは、サポートが終了した以下の API またはパラメータが使用されています。
android.view.Window.setStatusBarColor
android.view.Window.setNavigationBarColor
これらは次の場所で開始します。
androidx.activity.EdgeToEdgeApi26.setUp
androidx.activity.EdgeToEdgeApi29.setUp
com.google.android.material.bottomsheet.BottomSheetDialog.onCreate
com.google.android.material.internal.EdgeToEdgeUtils.applyEdgeToEdge
com.google.android.material.sidesheet.SheetDialog.onCreate
この問題を解決するには、これらの API またはパラメータの使用をやめてください。
build.gradleは以下です。
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.8.7'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7'
implementation 'androidx.navigation:navigation-fragment:2.8.9'
implementation 'androidx.navigation:navigation-ui:2.8.9'
間接的に使ってるんだろう
とりあえずライブラリを全部更新してみたら
APIレベル要件の対応が毎年恒例ですげーストレス
放置のアプリも小銭稼いでくれるから切るに切れず
毎回謎エラーと戦うよ
Activity遷移でActivityAからActivityBに移動するとき
データを渡したい場合、intentにputExtraするのが一般的っぼいけど
なぜ直接ActivityBからActivityA.data1,Activity.data2のようにして読み込むことはしないのですか?
(このdata1,data2はActivityAのstaticなプロパティとする)
>>246 いや別Activityも同一プロセスのはずだ
別アプリのActivityを実行出来るから、その時は別のユーザープロセス上でActivityが実行されるだろう
さらに、AndroidManifestの記述次第で、同一アプリでも別プロセスで実行したり別アプリでも同一プロセスで実行出来るとAIが言っている
staticだとOSがメモリ不足で勝手にアプリを終わりにしたとき値が紛失する
Activityが非表示になってしばらましてまた表示されたとき
Activityインスタンスのプロパティの変数たちはそのまま値は保存されたままですか?
Activityが非表示になってしばらくしてまた表示されたとき
Activityインスタンスのプロパティの変数たちはそのまま値は保存されたままですか?
OSが勝手にメモリを解放するときStaticの値も解放されることがあって
このケースでもアプリは終了されないことも多い
再開時のActivity再生成でStaticの値を失っていることになるってしまうということだな
いや破棄じゃなくて一時的に非表示になってたときの話なのですが
一時的に非表示になったときに破棄されることがある
ことがある程度なので内容によっては気にしないという選択もできる
MediaRecorderクラスの使い方の質問なのですが
そのインスタンスをmrとして
mr.stop();
mr.reset();
mr.release();
mr=null;
の4行のそれぞれでは内部的にどのようなことが行われているか詳しく教えていただけませんか?
基本的な質問ですが
自作アプリでActivityAからActivityBを呼んでAが非表示になってます。
ここで他のアプリ(電話アプリでもなんでもいいけど)を操作していると自作アプリはosにより強制的に消されることがあるんですよね?
そうなったときまた自作アプリを立ち上げると立ち上がるのはActivityAですかActivityBですか?
いままで入門系の本はたくさん読んだけど、こんな基本的なことをはっきり書いてる本は一冊もない。どうなってるの。
B
バックキーで戻ったらAが復元されて開かれる
singleTaskとかその辺いじってたら挙動変わるかも
【田中角栄流】心の汚い女性の8つの見分け方|裏切る人の特徴と縁を切る究極の見極め術|名言|人間関係|処世術
youtube.com/watch?v=9Z09HRsRPNk
ネット上の発言での反論で明確な回答「論文」が無い人って・・・
>>260 Actiivtyの設計思想が順序保証しねえからいつ呼び出されても良いように作っとけよってなっとるやろ
初歩的な質問ですが
ActivityからServiceを立ち上げたらそれは別スレッドで実行されるのですか?
そしたら
Serviceは立ち上げるとコードでストップしない限り
永久に動き続けるんですか?
>>268 さっぱり分からないじゃないか。
その理由もそのURL先の説明も。
入門者がそのしくみを段階的に分かるようになるための本とかサイトはないのですか?
> 271
ありがとうございます
しかしその先も竹を割ったようなわかりやすい解説とは言えないですね
基本的な質問でございます。
Activityは裏に行ったら常に破棄される可能性があるとのことですが、
普通にfinish()やBackボタンで終了されたときとちがいonDestroy()は呼ばれないという認識で正しいでござるか?
大体は呼ばれないけどたまに呼ばれるので呼ばれる想定で実装しておいた方がいい
開発者オプションでアクティビティを保持しないにしておいたら毎回破棄を再現できる
>>274 そんな適当な仕様になっているのか(ワラ。
開発者はいろいろ気をつかわねばならぬことがあって大変だな。
>>268 サービスも強制破棄になる可能性があるなら
自作の目覚ましアプリも作れなくない?
朝7:30にアラームが鳴るようサービスで動くようなアプリを作っても
サービスが破棄されて鳴らないことがあるなら会社に遅刻することもありえる?
>>276 ActivityやService内に実装したonCreate()やonStartCommand()みたいな関数はシステムからUIスレッド上で呼び出されるが、呼び出されたら数秒以内に関数の処理を終了させてリターンしなければいけないルールになっている
そのまま動き続けて何かしたい場合には別のスレッドを作ってそっちでやる必要がある
しかし別スレッドで動き続けるのにも年々制限が追加されてアラームを実現するような長時間の時間待ちには使えない
馬鹿なアプリが動き続けてバッテリーを減らすことになる可能性がある仕組みはほとんど潰された
アラームのようなものを実装するにはアラームマネージャを使う
https://developer.android.com/develop/background-work/services/alarms >>277 素晴らしい情報ありがとうございます。
まずテクニカルなことの解釈や読解の前に
なぜわたしの知らないことをたくさん知っているの?
どの本やサイトで勉強したのかをまず非常に知りたいのですが、なぜでしょうか?
少なくともそんな情報は
いままで買ったり積ん読してるAndroid開発の入門書10冊くらいには載っていない気がする。
>>278 別のスレッドを作って~のあたりまではAndroidの入門書を読み進めればほとんど載っていただろう
昔はAsyncTaskを使うとかだったが今はKotlinコルーチンを使ってになるのかな
それ以降の情報は、アプリをメンテしているのならば毎年更新されるこれを見て理解をしなければいけない
https://developer.android.com/about/versions?hl=ja いやでも理解することになる
でもいまならば、ほかの人が言っているようにChatGPTとかに聞いた方が早いだろう
とりあえずChatGPTが面倒だと思うならば、Google検索のAIモードでもけっこう情報は得られるぞ
>>281 さようでございましたか
じゃもっと本を読んで勉強しますわ
調べたら「Androidを支える技術」のIとIIみたいなのが中上級の本みいだけど、こういう高度な本ってほとんど出版されてないのかな?
Kotlinは嫌いだから一切知らないけどJavaで突き進むのはダメじゃないよね?
学習コストが高すぎる。
Kotlinは難しいと言われるJavaを簡単にした言語というのが本当だとすると
わざわざ文法が違うだけでKotlinを学ぶ意味は少ないし大(Java)は小(Kotlin)を兼ねるみたいな関係になってるんだったらますますKotlinは意味ないし。
もともとゲーム開発のUnityでC#やってるしフロントエンドのJavaScriptやバックエンドのPHP,SQLもやってるから
新言語を学ぶ余裕はない(他に勉強すること多すぎて)
>>282 他の人も言ってるけど
本読むよりChatGPTに聞いたほうがいいよ
>>282 その本は基礎を固めるのにはよいと思うけどAndroid7対応だからけっこう古いね
Androidは8~16で随分変わってしまったからその辺の情報は公式の上のリンクかChatGPTなりに聞くかする必要があるだろう
>>283 Javaでも実力があれば組めるけど、Kotlinコルーチンを使ったサンプルを動かすのはきついし、将来Viewが非推奨になってComposeを使う必要が出てくるとKotlinが必須になるかもしれない
もはやAndroidはKotlinがデファクトスタンダードみたいな状況だから
ネットで調べ物してもKotlinの情報が多く見つかるだろうしそれをJavaに変換するコストを考えるとKotlinで書いた方が良いと思うけどなあ
変なこだわりでコトリンを毛嫌いするよりとりあえず使ってみなよ
シンタクスシュガーだらけの言語なので記述の選択の幅が広すぎるから
「あれもこれも達人みたいに使えるようになりたい!!」みたいな欲張りな考えさえ捨てれば
誰でも普通にすっと使えるようになるから
>>283 > Kotlinは難しいと言われるJavaを簡単にした言語というのが本当だとすると
「簡単」というのが何を意味するのかによるな。
Java で書くと長くなって分かり辛くなるようなことを短く分かりやすく書ける(難しいことを簡単に書ける)という意味での簡単ならその通りだと思うが。
Kotlin で書いた方が色々と楽だよ。
>>284-286 ありがとうございます。
その本は熟読してみます。2冊読破するのに何ヵ月かかるかわかりませんが。
ChatGPTはよく嘘つくと言われますがプログラミングの分野ではどれほど信頼できるのでしょうかね?
わたしはKotlinを毛嫌いしています。
Javaで突き進めるところまでいくかあるいは永遠にJavaを使い続けます。
上位互換(この語の使い方があってるかわからないけど)になってるならなおさらKotlinはいらん気がするし。わたしの認識ではJavaすら難しいと考える人のために浅い知識のままでも開発できるようにしたのがKotlin。
ところで
onSaveInstanceStateで保存してデータはどこに保存されてるんですか?
PrefernceやSQLデータベースのようにAndroidの中のアプリ専用フォルダの中?
>>291 Kotlinの方が多機能なので上位互換ではないよ
KotlinでJavaの機能は問題なく使えるが、JavaでKotlin固有の機能を使えるというわけではない。
現在のモダンなAndroid開発のフレームワークがKotlinで楽に実装できる設計になっているから、
今からJavaでゼロから開発するとKotlinで始めるより結果的により苦労すると思う
しかし世の中で言語の普及率は
Java >>>>>>>>>> Kotlin
じゃないか
Javaは小昔からあって信頼がある。
KotlinはiPhone開発のObjective-Cのように消えてしまわないか?(わたしの本音:消えてしまえ)
バックエンド開発でもPHPやPythonがあるのにわざわざRubyを作った日本人がいたが、わざわざ開発者に多大なる言語習得コストを強いて無駄じゃなかったか?実際Rubyは下火になってるし日本だけでしか通用しない。
>>295 Java習得してるならKotlinでJavaのように書くことができるぞ
Kotlinでは型定義が後置になっているのでそういう違いだけ抑えておけばいい
Javaの土台があれば自分でコーディングするぶんには学習コスト一日かからん微々たるもの
サンプルコード読むときには省略(Kotlinの特徴)されまくってて最初は読めないケースがよくあると思うけど
今の時代AIに聞けば解決するだろうよ
>>292 そのデータはプロセスのメモリ上に保存されて、ファイルやDBに永続的な保存はされない
検索してみると、多分お前の読もうと言ってる本に書いてあるぞ
情報収集力低すぎね?そんな奴がKotlin批判とか笑えない
>>295 Objective-CがSwiftに世代交代したようにJavaもKotlinに世代交代される側だと思うぞ
AndroidはもはやKotlinがデファクトスタンダード
サーバー側も新規ならKotlinじゃね
マルチプラで使おうと思ったけどまだ未成熟だったので使うのをやめた
>>295 そもそもたかが言語習得コストを多大なるとか言ってる時点でプログラミング向いてないよ
特にKotlinなんて普通のJava経験者なら30分くらいで習得終わるし
今時JavaはできるけどKotlinはできませんなんてやつはAndroidエンジニアとして転職する先はないだろう
AIを信頼できるかなんて考える必要あるのか
5chやブログコードのコピペが信頼できるのか
Kotlin消えてしまえなんていうやつはAndroid Studioも使うな
eclipseでやってろよ
広辞苑より
「毛嫌い」
(鳥獣が相手の毛なみによってすききらいすることから) 何という理由もなく、ただ感情的にきらうこと。「インテリを―する」