Android studioを使って最初のActivityでRecyclerViewが表示されるアプリを作っています。
ほとんど完成してテスト用のビルドも実機テストも問題なくRecyclerViewが表示されました。
しかしApk化して端末に入れてテストすると最初のActivityで表示されるRecyclerViewが表示されないので
色々試してみたところproguardがtrueの時に表示されないことが分かりました。
proguardがいたずらしているみたいなので、ネットを色々調べてkeepするコードを設定してみましたが
やはり表示されません。ちなみにコード構造上に問題があるかと思い、Lintチェックをひと通りやって
Javaファイルは全部緑のチェックが入っている状態です。
質問は
1)どういった要因が考えられるでしょうか?
2)proguardのkeepしたものも下記に提示しますがこれ以外に抜けているものがあるでしょうか?
3)Apk化したものをログキャットの様にエラー確認したいのですが方法はあるでしょうか?
よろしくお願いします。
環境 os mac
開発環境 Android studio 2.2.3
build.gradle
buildTypes { debug { minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.google.firebase:firebase-ads:10.0.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:cardview-v7:25.3.1' compile 'com.android.support:design:25.3.1' compile 'com.google.code.gson:gson:2.2.4' compile 'com.android.support:support-v4:25.3.1' testCompile 'junit:junit:4.12' } apply plugin: 'com.google.gms.google-services'
proguard-rules.pro
-keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } -optimizationpasses 5 -keep class !com.○○○○.** -keep class android.support.v7.widget.RecyclerView{ *; } -dontwarn android.support.design.** -keep class android.support.design.**{ *; } -keep public class android.support.design.R$*{ *; } -keep interface android.support.design.**{ *; } -keepattributes *Annotation*
KujiViewHolder.java
public class KujiViewHolder extends RecyclerView.ViewHolder { View base; TextView kujiContents; TextView kujiNumber; public KujiViewHolder(View v) { super(v); this.base = v; this.kujiContents = (TextView)v.findViewById(R.id.kujiContents); this.kujiNumber = (TextView)v.findViewById(R.id.kujiNumber); //文字数制限して1行にする this.kujiContents.setSingleLine(true); } }
KujiAdapter.java
public class KujiAdapter extends RecyclerView.Adapter<KujiViewHolder> { private ArrayList<DataType> arrayList; private int tabNumber; public KujiAdapter(ArrayList<DataType> arrayList, int tabNumber) { this.arrayList = arrayList; this.tabNumber = tabNumber; } @Override public KujiViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from( parent.getContext()).inflate(R.layout.card_layout, parent, false ); return new KujiViewHolder(view); } @Override public void onBindViewHolder(final KujiViewHolder holder, int listposition) { holder.kujiContents.setText(arrayList.get(listposition).getKuji_contents()); holder.kujiNumber.setText(arrayList.get(listposition).getKuji_number()); holder.base.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(holder.base.getContext(),ChangeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("position",holder.getAdapterPosition()); intent.putExtra("tabnumber",tabNumber); intent.putExtra("hint1",arrayList.get(holder.getAdapterPosition()).getKuji_contents()); intent.putExtra("hint2",arrayList.get(holder.getAdapterPosition()).getKuji_number()); MyApplication.getmContext().startActivity(intent); } }); } @Override public int getItemCount() { return arrayList.size(); } }
MainActivity.java
public class MainActivity extends AppCompatActivity { private ArrayList<DataType> lot1Array; private ArrayList<DataType> arrayList; RecyclerView recyclerView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lot1Array = new ArrayList<>(); arrayList = new ArrayList<>(); String Lot1Name = PrefManager.loadString(getApplicationContext(),"lot1key", this.getString(R.string.loto1_button)); recyclerView = (RecyclerView) findViewById(R.id.cardList); recyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); lot1Array = PrefManager.loadDataList(getApplicationContext(),"lot1Array"); //ArrayListの初期値設定して保存 if (lot1Array.isEmpty()){ initArray(lot1Array,"1等","2等"); arrayList = lot1Array; PrefManager.saveDataList(getApplicationContext(),"lot1Array", lot1Array); } //既にデータがあるので lot1Array = PrefManager.loadDataList(getApplicationContext(),"lot1Array"); IndicateArray(lot1Array, tabNumber); } //Arraylistを表示するメソッド public void IndicateArray(ArrayList<DataType> arrayList, int tabNumber){ RecyclerView.Adapter adapter = new KujiAdapter(arrayList,tabNumber); recyclerView.setAdapter(adapter); recyclerView.addItemDecoration(new DividerItemDecoration(this)); adapter.notifyDataSetChanged(); } //Arraylistを初期化するメソッド public void initArray(ArrayList<DataType> lotArray, String content1, String content2){ String[] contentData = { content1, content2 }; String[] numberData = { "1", "3" }; for (int i = 0; i < contentData.length ; i++){ String kuji_contents = contentData[i]; String kuji_number = numberData[i]; lotArray.add(new DataType( kuji_contents, kuji_number )); } } }
activityMain.xml
<android.support.v7.widget.RecyclerView android:id="@+id/cardList" android:layout_weight="100" android:layout_width="match_parent" android:layout_height="0dp" />
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/20 04:37
2017/10/20 04:39