🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

934閲覧

リリースでのみIndexOutOfBoundsExceptionが出る

abc1222

総合スコア24

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/02/14 01:59

編集2021/02/16 01:13

デバッグではクラッシュすることが無かったため、リリースしました。
しかし、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) } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/02/14 02:04

情報が少なすぎます。エラーが出てる箇所のソースくらい載せてくれないと、何も分かりません。
fumu7

2021/02/14 03:06

質問のimport文 2行のみで、エラーが発生するのですか? 違いますよね? 「特定のFragmentでのみエラーが出ており」というFragmentのプログラムを質問に追加しないと、誰も回答できなと思います。
abc1222

2021/02/14 04:39

失礼いたしました。 ただ、エラー文が下記のようになっており、インポート以外にエラーが出ている箇所が何処なのか分かりません。 java.lang.IndexOutOfBoundsException: Empty list doesn't contain element at index 0. at r.l.e.get(:1) at (パッケージ名).(フラグメント名)$i.c(:16) 16がリンクになっており、それが質問に記載したエラー部分です。 この場合、該当のfragmentのコードを全て記載すれば良いのでしょうか
hoshi-takanori

2021/02/14 05:05

その fragment のソースを出しても構わないのであれば、import を含めて全て記載していただくのが一番です。 (パッケージ名やフラグメント名、処理の詳細などはある程度伏せていただいても構いませんが…。) が、当該 fragment だけでなく、ビルドの設定など複合的な要因が絡んでる可能性も高そうですね。 また、そのアプリはどのようなものか (規模、種類、使ってるライブラリ、などなど) と、エラーが出るのはどのタイミングか、LogCat に出ているメッセージはその 3 行だけか、などの情報も欲しいです。
abc1222

2021/02/14 05:07

丁寧にありがとうございます。 一部を伏せながら追加したいと思います。 また、ビルド設定についても問題がありそうとのことなので、経緯も追記したいと思います
abc1222

2021/02/14 10:40

ご確認いただきありがとうございます。 クラッシュレポート来ていました! ※ ○○:Fragment □□:関数 java.lang.IndexOutOfBoundsException java.lang.IndexOutOfBoundsException: at kotlin.collections.EmptyList.get (EmptyList.java:1) at kotlin.collections.EmptyList.get (EmptyList.java:1) at パッケージ名.ui.account.○○Fragment.□□ (○○Fragment.java:16) at パッケージ名.ui.account.○○Fragment.access$□□ (○○Fragment.java:16) at パッケージ名.ui.account.○○Fragment$onCreateView$3.onChanged (○○Fragment.java:16) at パッケージ名.ui.account.○○Fragment$onCreateView$3.onChanged (○○Fragment.java:16) at androidx.lifecycle.LiveData.considerNotify (LiveData.java) at androidx.lifecycle.LiveData.dispatchingValue (LiveData.java) at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged (LiveData.java) at androidx.lifecycle.LiveData$LifecycleBoundObserver.onStateChanged (LiveData.java:2) at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent (LifecycleRegistry.java) at androidx.lifecycle.LifecycleRegistry.forwardPass (LifecycleRegistry.java:28) at androidx.lifecycle.LifecycleRegistry.sync (LifecycleRegistry.java:28) at androidx.lifecycle.LifecycleRegistry.moveToState (LifecycleRegistry.java) at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent (LifecycleRegistry.java) at androidx.fragment.app.FragmentViewLifecycleOwner.handleLifecycleEvent (FragmentViewLifecycleOwner.java:38) at androidx.fragment.app.Fragment.performStart (Fragment.java:38) at androidx.fragment.app.FragmentStateManager.start (FragmentStateManager.java:38) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:38) at androidx.fragment.app.FragmentManager.addAddedFragments (FragmentManager.java) at androidx.fragment.app.FragmentManager.executeOpsTogether (FragmentManager.java:8) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute (FragmentManager.java) at androidx.fragment.app.FragmentManager.execPendingActions (FragmentManager.java:4) at androidx.fragment.app.FragmentManager$4.run (FragmentManager.java) at android.os.Handler.handleCallback (Handler.java:739) at android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:135) at android.app.ActivityThread.main (ActivityThread.java:5438) at java.lang.reflect.Method.invoke (Method.java) at java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:912) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:707)
abc1222

2021/02/16 01:16

ありがとうございます! どう見れば良いのか分からないのですが、そこから調べて勉強してみます! また、リリースビルドの設定が間違っていたようなので修正し、リリースビルドでもクラッシュを確認しましたので、質問を修正しました。 Proguardについて何も知らないままリリースしていたので、そこも勉強して見直していきます。
guest

回答1

0

自己解決

Proguardによって必要なものまで圧縮されていたことが原因でした。
圧縮するものしないものを細かく設定することで解決することができました。
存在すら知らなかったので、リリースビルドでのみ起きるエラーはここからチェックしたほうが良さそうですね

投稿2021/03/25 08:57

abc1222

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問