この問題は発生しません。次のようにProguardを有効にしないと:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
}
}
Logcat:
Java.lang.RuntimeException: Java.lang.NoSuchMethodException: com.example.NewUsers$f.<init> [class Android.view.View]
at i.c.a.b.f.b(:147)
at androidx.recyclerview.widget.RecyclerView$g.a(:7078)
at androidx.recyclerview.widget.RecyclerView$v.a(:6235)
at androidx.recyclerview.widget.RecyclerView$v.b(:6118)
at androidx.recyclerview.widget.RecyclerView$v.d(:6114)
at androidx.recyclerview.widget.LinearLayoutManager$c.a(:2303)
at androidx.recyclerview.widget.LinearLayoutManager.a(:1627)
at androidx.recyclerview.widget.LinearLayoutManager.a(:1587)
at androidx.recyclerview.widget.LinearLayoutManager.c(:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(:3851)
at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(:1897)
at androidx.recyclerview.widget.RecyclerView$a.run(:414)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:996)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:794)
at Android.view.Choreographer.doFrame(Choreographer.Java:725)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:981)
at Android.os.Handler.handleCallback(Handler.Java:883)
at Android.os.Handler.dispatchMessage(Handler.Java:100)
at Android.os.Looper.loop(Looper.Java:237)
at Android.app.ActivityThread.main(ActivityThread.Java:7807)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1047)
Caused by: Java.lang.NoSuchMethodException: com.example.NewUsers$f.<init> [class Android.view.View]
at Java.lang.Class.getConstructor0(Class.Java:2332)
at Java.lang.Class.getConstructor(Class.Java:1728)
at i.c.a.b.f.b(:144)
at androidx.recyclerview.widget.RecyclerView$g.a(:7078)
at androidx.recyclerview.widget.RecyclerView$v.a(:6235)
at androidx.recyclerview.widget.RecyclerView$v.b(:6118)
at androidx.recyclerview.widget.RecyclerView$v.d(:6114)
at androidx.recyclerview.widget.LinearLayoutManager$c.a(:2303)
at androidx.recyclerview.widget.LinearLayoutManager.a(:1627)
at androidx.recyclerview.widget.LinearLayoutManager.a(:1587)
at androidx.recyclerview.widget.LinearLayoutManager.c(:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(:3851)
at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(:1897)
at androidx.recyclerview.widget.RecyclerView$a.run(:414)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:996)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:794)
at Android.view.Choreographer.doFrame(Choreographer.Java:725)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:981)
at Android.os.Handler.handleCallback(Handler.Java:883)
at Android.os.Handler.dispatchMessage(Handler.Java:100)
at Android.os.Looper.loop(Looper.Java:237)
at Android.app.ActivityThread.main(ActivityThread.Java:7807)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1047)
現在のプロガード:
-keep class com.example.models.** { *; }
Javaクラス:
public class NewUsers extends AppCompatActivity {
....
@RequiresApi(api = Build.VERSION_CODES.Lollipop)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_users);
....
mNewUsersList = findViewById(R.id.newUsers);
mNewUsersList.setHasFixedSize(true);
mNewUsersList.setLayoutManager(new LinearLayoutManager(this));
onStart();
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Users, UsersViewHolder> adapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(
Users.class,
R.layout.users_list,
UsersViewHolder.class,
mDatabaseReference
) {
@Override
protected void populateViewHolder(UsersViewHolder usersViewHolder, Users users, int position) {
usersViewHolder.setName(users.getName());
}
};
mNewUsersList.setAdapter(adapter);
}
public static class UsersViewHolder extends RecyclerView.ViewHolder {
View mView;
public UsersViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
}
public void setName(String name) {
TextView mUserNameView = mView.findViewById(R.id.textViewUserName);
mUserNameView.setText(name);
}
}
}
可能性はありますか、リリースのために縮小と縮小を有効にしたいだけです
モデル:
public class Users {
String name;
public Users() {
}
public Users(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
解決策1:
保持するクラスをcom.example.model
からcom.example
に変更します。
より良い解決策
このクラスを使用しているファイルに適切にインポートし、いかなるリフレクションも使用していない場合、proguardはこれを削除しないでください。
このクラスにアクセスするためにリフレクションまたは間接メソッドを使用する必要がない可能性がある共通の位置に配置してみてください
Java.lang.RuntimeException:Java.lang.NoSuchMethodException:com.example.NewUsers $ f。 [class Android.view.View] at i.c.a.b.f.b(:147)
上記の例外は、特定のメソッドが見つからない場合にスローされます。ここはプロガードによるものです。あなたは試してみるべきです
-keep class com.example.** { *; }
-keepclassmembers class com.example.** { *; }
パッケージ全体に @Keep
を追加すると、クラス全体がそのまま保持されます。メソッドまたはフィールドに追加すると、メソッド/フィールド(およびその名前)だけでなく、クラス名もそのまま保持されます。
OPは
public class HomeActivity extends AppCompatActivity {
private TextView f2032b;
private Button f2033c;
ご参考までに
これらの追加の最適化を有効にするには、プロジェクトのgradle.properties
ファイルに以下を含めます。
Android.enableR8.fullMode=true
ランタイムの問題を回避するために、追加のProGuardルールを含める必要がある場合があります。 Enable more aggressive optimizations
に関する公式ガイドラインを読む
クラスのパッケージはcom.example
ですが、プロガードルールはcom.example.models
。これを修正すると問題が解決するはずです。