简体   繁体   中英

Proguard obfuscation crashes app in getView

Spent several hours and was unable to prevent the app crashing after obfuscation. Also searched around to no avail. If someone could give me a hint in the right direction I'd appreciate it. The crash starts where getView get (Unknown Source)

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: android.content.res.Resources$NotFoundException: Resource ID #0x0
E/AndroidRuntime:     at android.content.res.Resources.getValue(Resources.java:1019)
E/AndroidRuntime:     at android.content.res.Resources.getDrawable(Resources.java:663)
E/AndroidRuntime:     at a.getDrawable(Unknown Source)
E/AndroidRuntime:     at android.support.v7.internal.widget.TintManager.getDrawable(Unknown Source)
E/AndroidRuntime:     at android.support.v7.internal.widget.TintManager.getDrawable(Unknown Source)
E/AndroidRuntime:     at android.support.v7.widget.AppCompatImageHelper.setImageResource(Unknown Source)
E/AndroidRuntime:     at android.support.v7.widget.AppCompatImageView.setImageResource(Unknown Source)
E/AndroidRuntime:     at roncada.skyweather.DropZoneAdapter.getView(Unknown Source)
E/AndroidRuntime:     at android.widget.AbsListView.obtainView(AbsListView.java:2222)
E/AndroidRuntime:     at android.widget.ListView.makeAndAddView(ListView.java:1774)

The code where it starts:

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        DropZoneAdapter adapter = new DropZoneAdapter(getActivity(), DZS);
        getListView().setAdapter(adapter);

    } //end postexecute

then in the adapter:

class DropZoneAdapter extends ArrayAdapter {

public DropZoneAdapter(Context context, ArrayList<DropZoneFragment.DZ_Row> sites) {
    super(context, R.layout.row_layout, sites);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position

and it breaks in the convertView.

Here's my proguard rules:

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
#-keepattributes *Annotation*
-keep class android.support.v4.internal.** { *; }
-keep interface android.support.v4.internal.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v7.widget.** { *; }
-keep interface android.support.v7.widget.** { *; }
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep public class * extends android.app.Activity
#-keep public class * extends android.support.v7.app.AppCompatActivity;
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-dontwarn android.support.**
-dontwarn com.google.common.**
-dontwarn org.apache.http.**
-dontwarn android.net.http.AndroidHttpClient
-dontwarn com.google.android.gms.**

Would appreciate any help. Thanks.

您可能应该保护Fragment免于混淆。

-keep public class * extends android.app.Fragment

Try this to keep resource ID:

# Keep resource files ID
-keepclassmembers class **.R$* {
    public static <fields>;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM