デバッグではクラッシュすることが無かったため、リリースしました。
しかし、Google Playからダウンロードしてみると、特定のfragmentに移動した時点でクラッシュします。
リリースしたアプリのエラーを見る方法が分からなかったので、とりあえずandroidstudioを開いてダウンロードした実機のログを見てみると、IndexOutOfBoundsExceptionのエラーが出てクラッシュしていました。
IndexOutOfBoundsExceptionが出ているのは下記です。
import (パッケージ名).*
import (パッケージ名).R
上記のインポートは他のFragmentでも使っているのですが、特定のFragmentでのみクラッシュしており、原因が分かりません。
ふわっとした質問で申し訳ないのですが、なぜIndexOutOfBoundsExceptionがインポートで出るのか全く分かっておらず、必要な情報も分からないので、何か手掛かりとなる情報を頂けますと幸いです。
状況
エミュレーター・実機ともに、デバッグではクラッシュしない
~~リリースビルドでも、エミュレーター・実機ともにクラッシュしない
Google Playからダウンロードしたもののみクラッシュする
※
恥ずかしながら今回のエラーをきっかけにリリースビルドを知りました。リリースする際にリリースビルドに切り替えているという認識(下記の作業)ですが、間違っていたらリリースビルドでの使用状況は把握できていません。
~~
リリースビルド設定が上手くできていませんでした。設定を見直したところ、リリースビルドでもクラッシュを確認しました。
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
コード
何処まで記載すれば良いのか分からないので、一旦エラーが出ているインポートを使用している所(インポートを消したらエラーが出る所)の前後のみ記載させていただきます。(コメントで使用している箇所に目印を付けています)
必要であればコメントいただければ追加します。
import (パッケージ名).* //省略 class ○○Fragment : Fragment() { private val ▲▲ViewModel: ▲▲ViewModel by activityViewModels() //2つ目の▲▲ViewModelで使用(赤文字に) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { super.onCreateView(inflater, container, savedInstanceState) ▲▲ViewModel.▲▲.observe(viewLifecycleOwner, { ▲▲ -> if (▲▲ != null) { val storageRef = FirebaseStorage.getInstance().reference val imageRef = storageRef.child("パス") GlideApp.with(this) //GlideAppで使用(赤文字に) .load(imageRef) .signature(ObjectKey(▲▲.update)) .into(▲▲Image) } }) binding = DataBindingUtil.inflate(inflater, R.layout.fragment_▲▲, container, false) //Rで使用(赤文字に) binding.▲▲ViewModel = ▲▲ViewModel binding.lifecycleOwner = this return binding.root } // 省略 private fun □□(□□: Map<String, □□>) { val cl = □□Layout as ViewGroup cl.removeAllViews() if (□□.isNullOrEmpty()){ // 省略 }else{ for ((key, value) in □□) { val childNum = cl.childCount val □□Num = □□.size if (childNum < □□Num){ layoutInflater.inflate(R.layout.□□, cl) //Rで使用(赤文字に) } val storageRef = FirebaseStorage.getInstance().reference val imageRef = storageRef.child("パス") GlideApp.with(this) //GlideAppで使用(赤文字に) .load(imageRef) .signature(ObjectKey(value.update)) .into(□□Image) } } }
回答1件
あなたの回答
tips
プレビュー