简体   繁体   English

Proguard混淆使getView中的应用崩溃

[英]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) 崩溃从getView get(未知源)开始

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 { 类DropZoneAdapter扩展了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. 并且它在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: 尝试这样做以保留资源ID:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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