2016-09-09 14 views
9

पर एक गलत इंटरफ़ेस पर बाइंडर आमंत्रण I एक स्थान जागरूक एप्लिकेशन विकसित कर रहा हूं। मैंने अपने एप्लिकेशन में Google Play स्थान सेवाएं और Google मानचित्र एकीकृत किए हैं। मेरा एप्लिकेशन डीबग मोड में किसी समस्या के बिना चलता है।सुरक्षा अपवाद: हस्ताक्षरित एपीके

Process: com.example.akif, PID: 4233 
    java.lang.RuntimeException: Unable to resume activity {com.example.akif/com.example.akif.activities.MainActivity}: java.lang.SecurityException: Binder invocation to an incorrect interface 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3400) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2713) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Caused by: java.lang.SecurityException: Binder invocation to an incorrect interface 
    at android.os.Parcel.nativeEnforceInterface(Native Method) 
    at android.os.Parcel.enforceInterface(Parcel.java:482) 
    at vz.onTransact(:com.google.android.gms.DynamiteModulesB:81) 
    at android.os.Binder.transact(Binder.java:499) 
    at com.google.android.gms.maps.a.bt.c(Unknown) 
    at com.google.android.gms.maps.i.b(Unknown) 
    at com.google.android.gms.b.d.b(Unknown) 
    at com.google.android.gms.b.j.a(Unknown) 
    at com.google.android.gms.maps.h.b(Unknown) 
    at com.google.android.gms.maps.h.a(Unknown) 
    at com.google.android.gms.b.a.c(Unknown) 
    at com.google.android.gms.b.a.e(Unknown) 
    at com.google.android.gms.maps.g.f(Unknown) 
    at android.support.v4.app.k.ay(Unknown) 
    at android.support.v4.app.x.l(Unknown) 
    at android.support.v4.app.ax.h(Unknown) 
    at android.support.v4.app.ax.i(Unknown) 
    at android.support.v4.app.ax.run(Unknown) 
    at android.support.v4.app.x.ae(Unknown) 
    at android.support.v4.app.i.aa(Unknown) 
    at android.support.v4.app.a.onPostResume(Unknown) 
    at android.support.v7.app.a.onPostResume(Unknown) 
    at android.app.Activity.performResume(Activity.java:6792) 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3377) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440)  
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2713)  
    at android.app.ActivityThread.-wrap12(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6077)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  

मैं हर जीवन चक्र विधि यह मेरा टुकड़ा के onResume विधि मैं कहाँ के लिए जाँच में क्या होता है कि कम से निम्नलिखित लॉग द्वारा देखा: जब मैं रिलीज़ मोड में हस्ताक्षरित APK पैदा करते हैं और एप्लिकेशन को चलाने के लिए, यह निम्न अपवादों के साथ स्टार्टअप पर दुर्घटनाओं निम्नलिखित के रूप में Google Play सेवाओं की उपलब्धता:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.1" 

    defaultConfig { 
     applicationId "com.example.akif" 
     minSdkVersion 15 
     targetSdkVersion 24 
     versionCode 1 
     versionName "0.1" 

     jackOptions { 
      enabled true 
     } 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 

    buildTypes { 
     debug { 
      applicationIdSuffix '.test' 
     } 

     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:24.2.0' 
    compile 'com.android.support:cardview-v7:24.2.0' 
    compile 'com.android.support:design:24.2.0' 
    compile 'com.android.support:preference-v7:24.2.0' 
    compile 'com.google.android.gms:play-services-location:9.4.0' 
    compile 'com.google.android.gms:play-services-maps:9.4.0' 
    compile 'com.github.mehmetakiftutuncu:toolbelt:1.1.0' 
    compile 'com.squareup.okhttp3:okhttp:3.4.1' 
    compile 'joda-time:joda-time:2.9.4' 
} 

मेरे पास दो गूगल मैप्स एपीआई k:

@Override public void onResume() { 
    Log.debug(getClass(), "onResume()"); 

    GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); 

    int googlePlayServicesAvailabilityResult = googleApiAvailability.isGooglePlayServicesAvailable(getContext()); 

    if (googlePlayServicesAvailabilityResult != ConnectionResult.SUCCESS) { 
     if (!googleApiAvailability.isUserResolvableError(googlePlayServicesAvailabilityResult)) { 
      Toast.makeText(getContext(), "Your device doesn't support Google Play location services. This application cannot run without it!", Toast.LENGTH_LONG).show(); 

      getActivity().finish(); 

      return; 
     } 

     Dialog errorDialog = googleApiAvailability.getErrorDialog(getActivity(), googlePlayServicesAvailabilityResult, GOOGLE_PLAY_SERVICES_REQUEST_CODE); 

     if (errorDialog != null) { 
      errorDialog.setCancelable(false); 
      errorDialog.setCanceledOnTouchOutside(false); 
      errorDialog.setOnDismissListener((DialogInterface dialogInterface) -> { 
       Toast.makeText(getContext(), "You need Google Play location services to run this application!", Toast.LENGTH_LONG).show(); 

       getActivity().finish(); 
      }); 

      errorDialog.show(); 
     } 
    } else if (googleApiClient.isConnected() && !isUpdatingLocation) { 
     startLocationUpdates(); 
    } 

    super.onResume(); 
} 

मेरे Gradle फ़ाइल ऐसा दिखाई देता है डीबग और रिलीज मोड के लिए क्रमशः मेरे पैकेज नाम com.example.akif.test और com.example.akif के अनुसार स्थापित किया गया है। इसलिए, मुझे नहीं लगता कि यह पैकेज नाम से संबंधित है लेकिन फिर से, यह बहुत अच्छा हो सकता है क्योंकि मुझे त्रुटि से कुछ भी समझ में नहीं आया।

कोई विचार क्या हो रहा है?

+0

यह [थ्रेड] (http://stackoverflow.com/questions/24591282/securityexception-binder-invocation-to-an-incorrect-interface-using-in-app-bill) जैसा दिखता है। – noogui

+0

@noogui लेकिन यह नहीं है। मैं बिलिंग सेवाओं का उपयोग नहीं कर रहा हूं। मेरे पास कोई एआईडीएल फाइल नहीं है। –

उत्तर

2

लगभग बिना किसी परिणाम के अनुसंधान के एक बहुत करने के बाद, मैं निम्नलिखित Proguard नियमों के साथ इस मुद्दे को ठीक करने में सक्षम था: कारण है कि मैं इस मुद्दे था

-keep public class com.google.android.gms.* { public *; } 
-dontwarn com.google.android.gms.** 

मैं अभी भी असली कारण पता नहीं है, लेकिन यह इस के साथ तय लगता है।

उम्मीद है कि इससे मदद मिलती है।

+1

आप बहुत अधिक रख रहे हैं। Http://stackoverflow.com/a/39701449/94363 देखें – rds

संबंधित मुद्दे