20210416のAndroidに関する記事は6件です。

[Android Studio]ToolsにSDKマネージャーがない、 build.gradleがない

Android StudioでFile→Openでフォルダを開くとき最初に指定するフォルダを間違えてる可能性があります。 自分の場合、このようなフォルダ構成になっておりました。 ドロイド君のアイコンが下記三つ並んでいるうちの、上二つのフォルダいずれかを指定して「OK」を押してしまうと、掲題の状態になります。 三つ目の青線が入ったところで「OK」を押すと、掲題の事象は解消されました。 目安としては「.gradle」などがあるディレクトリを選択するということのようです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

kotlinでFirebaseAuthenticationを使ってみる

はじめに 現在kotlinでチャットアプリを作成中でアカウント作成機能とログイン機能などをつけるためにFireBaseを使用しています。 本記事ではAndroidプロジェクトにFirebaseを追加する方法について記載しています。(未来の自分のためのメモです) アプリ開発ほぼ初心者で現在勉強中またはバック側の知識が薄い自分みたいな人はメモ程度ですが何かの参考にしていただければ 開発環境 ・使用言語:kotlin ・AndroidStudio 4.1.2 ・Android Emulator (自分はm1 Macでの開発をしているので以下のものをダウンロードして使用) https://github.com/google/android-emulator-m1-preview Firebase側の設定 下記画面のプロジェクトの追加を選択し、手順に沿ってプロジェクトを作成する(自分が使っているFireBaseプロジェクトは右側のmessage app) プロジェクトの作成が完了すると下記のような画面に移動する。 自分のチャットアプリではメールアドレスとパスワードで会員登録することを想定して開発を行なっているので 'メール/パスワード' が有効になっていますが、Google認証を使用したい場合などは 'Google' のステータスを有効にすることで使用できるかと思います。 こうして作成したアカウントは下記画像のように 'Users' に追加されます。 Firebaseの追加 プロジェクトの設定からマイアプリ内のgoogle-services.jsonのファイルをダウンロード ダウンロードしたjsonファイルをAndroidStudioのapp内に格納し、アプリに Firebase SDK を追加するためgradleファイルで宣言。宣言方法は以下の通り(バージョンにもよる) dependencies { // ... // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:26.8.0') // When using the BoM, you don't specify versions in Firebase library dependencies // Declare the dependency for the Firebase SDK for Google Analytics implementation 'com.google.firebase:firebase-analytics-ktx' // Declare the dependencies for any other desired Firebase products // For example, declare the dependencies for Firebase Authentication and Cloud Firestore implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-firestore-ktx' } とここまで説明してきましたが公式のドキュメントにもAndroidプロジェクトにFirebaseを追加する方法が記載されています。 自分もこれを見て頑張って作業していたのですが、なかなか実装できず苦労しました。 これを読めば一撃でわかる人が多数だと思いますので参考にしてください https://firebase.google.com/docs/android/setup?hl=ja#kotlin+ktx まとめ 環境構築って嫌になっちゃっていつの間にか部屋の模様替えとか始めちゃいますよね・・・
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

FragmentStatePagerAdapterの復元処理でハマった話

起こった事象 Activityが破棄された時、FragmentStatePagerAdapterのデータが残っているため、 Fragmentに対して直接指示する時に内部変数が初期化されてない状態になっている。 そのため、呼び出し行うとクラッシュする。 対処方法 保存の流れとして、 onSaveInstanceState -> onDestroy -> onRestoreInstanceState のため、onRestoreInstanceStateで FragmentStatePagerAdapterのfragmentManagerのデータを削除する。 データを削除し、改めてonCreateから生成し直せばいい。 誤った対処 メモリ破棄できてないから、きちんと破棄すればいい。という思考だけで、対応しようとしてしまった。 破棄処理のonDestroyでクリア処理を追加する形にしたが上手くいかなかったため、 破棄する方法が違うと思って、あれやこれや(※1)と試してやってしまった。。 が、先に書いた"対処方法"の通り、いい感じに消し込めたとしても、 FragmentStatePagerAdapterがonRestoreInstanceStateをいい感じに実行するため復元されてしまう。 ので、消し込み処理が意味ないものとなっていた。 (※1) OnDestroyのタイミングで、 viewPagerをリセットしたり、FragmentStatePagerAdapterのデータを空にし通知したり、 framentManagerのfragmentを全て破棄したり、FragmentStatePagerAdapterの渡すf配列のfragmentをWeakReferenceにしたり FragmentStatePagerAdapterをFragmentPagerAdapterにしたり..etc.. まとめ 破棄時のライフサイクルを意識しきれてなかったのと、 FragmentStatePagerAdapterの理解度が浅かったのものあるが無駄にハマった。 「破棄しきれてないから破棄すればいいじゃん」というバイアスが取れないと詰みます。 みなさんこうならないようにしてくださいw おまけ 前ふりをよく書いてたけど、やめようと思う。 コンテンツがストーリー的になってないなら結論言った方が早いよねと・・・ テンション高まった時だけにしよう
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1macでjksからpemをつくる

androidアプリをgoogleストアにリリースするにあたり、コンソールに 'アップロード証明書で署名されていない APK をアップロードしました。使用する証明書は同じである必要があります。' と言うエラーが出て何度やっても弾かれるようになりました。 要するに以前にコンソールに上げた証明書を無くしてしまっていて、今回あげようとしたapkの証明書じゃだめってことみたい この通りGoogleに問い合わせて新しい証明書を発行しようとしてみたけど、指示された手順通りにやってもできない。 jksファイルを作るとこまではできるんだけどこのjksからpemを生成するとこで詰んでしまう。 Googleからのメールにある keytool -export -rfc -alias PEMtest -file upload_certificate.pem -keystore /Users/tester/Desktop/Key/PEMtest のコマンドが何度やっても 不正なオプション: -rfc -alias と言うエラーでpemファイルが生成されてくれない。 ググりまくってたどり着いたサイト https://atomic104.hatenadiary.org/entry/2020/08/28/153945 こちらに書かれてる手順が一番正解に近かった ただこれも、私の場合はだめで最後の keytool -export -rfc -alias upload -file 希望のファイル名.pem -keystore jksのパス このコマンドのオプション部分を削除することでやっとpemを出力することができた、つまり keytool -export -alias jks作るときにaliasの項目に入れた値 -file rikod.pem -keystore /Users/UserName/Desktop/Key/hogehoge.jks このコマンドで通りました。 とりあえずメモ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Flutter】Textを簡単にグラデーションさせる

パッケージのインストール gradient_textを導入すれば簡単にテキストのグラデーションを実装できます。 pubsub.yml gradient_text: ^1.0.2 インポート import 'package:gradient_text/gradient_text.dart'; グラデーション可能なテキストウィジェットを作成 テキストウィジェットを下記のGradientTextに置き換えるだけです。 GradientText("テキスト", gradient: LinearGradient( //ここでグラデーションの色を複数設定できる colors: [Colors.deepPurple, Colors.deepOrange, Colors.pink] ), style: TextStyle(fontSize: 30), //スタイルも設定可能 textAlign: TextAlign.center); //テキストの配置
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Bio IKで指にIKを付けてみた + スマホVRで動かしてみた

以下の画像のような感じです(Bio IKのストアページより)。 今後、ハンドトラッキングとか流行りそうだし、その際に便利そうかなと思ったので、記事にしてみました。 そもそも何がしたいの? 以前、私は「スマホVRでハンドトラッキングをやってみた」的なUnityアセットを作成して、こちらの記事を投稿しました。 その後、さらに機能を拡張して、HandMRという形になりました。 そこでは、手をLineRendererなどで簡素に表示していましたが、それだけでは面白くないだろうと思い、3Dモデルを動かしてみようと思ったのですが、向きが取得できていないのもあり、あまり上手くいきませんでした。 それで、「指の座標だけでも簡単にモデルを動かせるようなものはないのか」と思い探してみたら、セールの抱き合わせで付いてきたこのアセットが使えそうだということになったので、試してみました。 ちなみに同じIKのアセットにFinal IKというものがあり、そちらにもFinger Rigというもので設定できますが、向き(Rotation)が無いせいなのか、上手くいきませんでした。 ただFinalIKのVRIKという機能も使いたかったので、BioIKとFinalIKを併用することにします(後述)。 もし、FinalIKのみでかつ向き(Rotation)が分からなくても出来る方法があれば、コメントください。 設定方法 モデルにBioIKコンポーネントを付け、各パラメータをサンプルシーンを参考に設定すれば完了です。以上(手抜き)。 なお手の指先のように、空のゲームオブジェクトが追加で必要なことがありますが、サンプル通りにやれば問題ないと思います。 スマホVRで使ってみた 以下のような感じです。 「Articulated Hand」を真似して設定しましたが、手首が上手くいっていないような感じなので、手首にもObjectiveの「Position」を追加しました(パラメータはデフォルト)。 なお、モデルはUnityちゃん(© UTJ/UCL)を、ステージはMagic Mirror Liteを使用しております。 スクリプトからの設定方法 BioIKは自由度が高い反面、パラメータが非常に多く、毎回モデルごとに設定するのはとても手間がかかります。 そこでスクリプトを使って自動で設定してみます。 一部抜粋すると、以下のようなコードになります。 Sample.cs using BioIK; // …(中略) var bioIK = animator.GetBoneTransform(HumanBodyBones.Hips).gameObject.AddComponent<BioIK.BioIK>(); // animatorは対象のモデルのAnimator bioIK.SetGenerations(2); bioIK.SetPopulationSize(75); bioIK.SetElites(2); bioIK.Smoothing = 0f; // 手首の場合 var boneTrans = animator.GetBoneTransform(HumanBodyBones.LeftHand); var bioSegment = bioIK.FindSegment(boneTrans); var bioJoint = bioSegment.AddJoint(); bioJoint.X.Enabled = true; bioJoint.X.Constrained = true; bioJoint.X.LowerLimit = -60f; bioJoint.X.UpperLimit = 60f; bioJoint.Y.Enabled = true; bioJoint.Y.Constrained = true; bioJoint.Y.LowerLimit = -60f; bioJoint.Y.UpperLimit = 60f; bioJoint.Z.Enabled = true; bioJoint.Z.Constrained = true; bioJoint.Z.LowerLimit = -60f; bioJoint.Z.UpperLimit = 60f; bioJoint.JointType = JointType.Rotational; bioJoint.SetOrientation(Vector3.zero); var bioPosition = bioSegment.AddObjective(ObjectiveType.Position) as Position; bioPosition.SetTargetTransform(target); // targetは対象のオブジェクトのTransform 上記のようなコードをStart()やエディタ拡張で実行するようにすれば、モデルごとに設定する手間が省けます。 FinalIKとの併用について 前述のFinal IKには、VRIKというコンポーネントがあります。 これは足のIKを設定して動かすことも出来ます(これだけならBioIKでも出来る)が、設定していない場合でも、他の部位(頭など)に応じて足の動きも自動で行われます。 これを使えば、全身を動かすことも可能ですが、そのままBioIKと併用しようとすると、お互いを上書きしようとするので、以下のようにする必要があります。 Project SettingsのScript Execution Orderで、「RootMotion.~」よりも後ろに「BioIK.BioIK」を追加 BioIKを使いたい箇所以外(手首~指先以外の部分)はJointやObjectiveを設定しない なお前述の通り、指の向き(Rotation)が分かっているのであれば、FinalIKのFinger Rigで済むので、BioIKは不要です。 全身を動かしてみた BioIKとFinalIK(VRIK)を併用して、全身を動かした結果がこちらです。 スマホのカメラでハンドトラッキングしているため、手の認識範囲が限られたり、認識(特に左右の判別やグーにしたとき)が悪かったりしていますが、それでも全身の動かせるというのは魅力的です。 使用アセットが多く手間がかかるため、全体の内容はいまのところ非公開ですが、要望があれば公開するかもしれません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む