Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android App crashes on Lollipop

hi I am using google license checker on my app it works on API 19 and below but crashes on lollipop. I saw the code that has to be add to my license check code but I don't know where to put this code or what should I edit. here is my code

log:

java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.licensing.ILicensingService }
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.licensing.ILicensingService }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1674)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1773)
at android.app.ContextImpl.bindService(ContextImpl.java:1751)
at android.content.ContextWrapper.bindService(ContextWrapper.java:538)
at com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)
at appinventor.ai_drsalmanshah165.Clinical_Examination.Splash.doCheck(Splash.java:103)
at appinventor.ai_drsalmanshah165.Clinical_Examination.Splash.onCreate(Splash.java:51)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
... 10 more

Java code:

public class Splash extends Activity {

MyLicenseCheckerCallback mLicenseCheckerCallback;
LicenseChecker mChecker;
byte[] SALT = new byte[] {
         my salt no.             };
     //Handler mHandler;
     String BASE64_PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoxvDF3HGQtrRch14wCPN6nAxasak8X4shJM6bCumNS+6xRXTnRZOSyAvHNa1145KlE/i1sy/";
     Context mContext;
     IBinder serviceBinder;
     String deviceId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.splash);

    mLicenseCheckerCallback = new MyLicenseCheckerCallback();
    deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
    // Construct the LicenseChecker with a policy.
    mChecker = new LicenseChecker(
        this, (Policy) new ServerManagedPolicy(Splash.this, new AESObfuscator(SALT, getPackageName(), deviceId)),
        BASE64_PUBLIC_KEY);
    doCheck();


}

private class MyLicenseCheckerCallback implements LicenseCheckerCallback {


    @Override
    public void allow(int reason) {
        // TODO Auto-generated method stub
         if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }

        // Toast.makeText(Splash.this, "License Verified", Toast.LENGTH_SHORT).show();
         Intent intent=new Intent(Splash.this,Home.class);
         startActivity(intent);
         finish();

            // Should allow user access.
            // so do nothing
    }

    @Override
    public void dontAllow(int reason) {
        // TODO Auto-generated method stub
         if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
       //  Toast.makeText(Splash.this, "License Verification Failed", Toast.LENGTH_SHORT).show();
         createDialog();
    }

    @Override
    public void applicationError(int errorCode) {
        // TODO Auto-generated method stub

    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mChecker.onDestroy();
}

private void doCheck() {
       // mCheckLicenseButton.setEnabled(false);
        setProgressBarIndeterminateVisibility(true);
      ///  mStatusText.setText(R.string.checking_license);
        mChecker.checkAccess(mLicenseCheckerCallback);
}

public void createDialog(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("PIRACY WARNING");
    builder.setMessage("This application is not licensed. Please purchase it from Android Market.  If you received this message in error, please contact Support.");
    builder.setPositiveButton("Buy Now", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(
                "http://market.android.com/details?id=" + getPackageName()));
            startActivity(marketIntent);
        }
    });
    builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
}
}

and here is the other code which I got that this can solve my problem. but don't know where to put it.

Intent serviceIntent = new Intent(
     new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")));
     serviceIntent.setPackage("com.android.vending");

     boolean bindResult = mContext
             .bindService(
               serviceIntent,
               this, // ServiceConnection.
               Context.BIND_AUTO_CREATE);
like image 985
user3866627 Avatar asked Feb 03 '15 17:02

user3866627


People also ask

Why do my Apps suddenly crash Android?

Apps on Android can crash because of low storage space, too many apps running simultaneously, a weak internet connection, or not having the proper app updates installed.

How do you fix an app that keeps crashing on Android studio?

The easiest way to fix an app that keeps crashing on your Android smartphone is to simply force stop it and open it again. To do this, go to Settings -> Apps and select the app that keeps crashing. Tap on the app's name and then tap on 'Force stop'. Now try opening the app again and see if it works well.

Why is my app suddenly crashing?

This usually occurs when your Wi-Fi or cellular data is slow or unstable, causing apps to malfunction. Another reason for Android apps crashing can be a lack of storage space in your device. This can occur when you overload your device's internal memory with heavy apps.


1 Answers

Waiting for an official solution, the current solution consists in patching Google's LicenseChecker class

com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)

like this:

new String(
-    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
+    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")))
+    .setPackage("com.android.vending"), // this fix the 'IllegalArgumentException: Service Intent must be explicit'
     this, // ServiceConnection.

Adding package name with statement setPackage("com.android.vending") makes the Intent explicit, i.e., 'safe' (as requested by Android Lollipop )

Note:

Please pay attention as after modifying LicenseChecker class you must change the min sdk version from 3 to 4 (thanks russellhoff)

Source:

https://code.google.com/p/android/issues/detail?id=78505#c19

like image 57
Pascal Avatar answered Oct 11 '22 06:10

Pascal