Java Android应用程序在棒棒糖上崩溃
嗨,我在我的应用程序上使用谷歌许可证检查器,它在API 19及以下版本上工作,但在棒棒糖上崩溃。我看到了必须添加到我的许可证检查代码中的代码,但我不知道该将此代码放在何处,也不知道应该编辑什么。这是我的密码 日志: Java代码:Java Android应用程序在棒棒糖上崩溃,java,android,eclipse,android-5.0-lollipop,Java,Android,Eclipse,Android 5.0 Lollipop,嗨,我在我的应用程序上使用谷歌许可证检查器,它在API 19及以下版本上工作,但在棒棒糖上崩溃。我看到了必须添加到我的许可证检查代码中的代码,但我不知道该将此代码放在何处,也不知道应该编辑什么。这是我的密码 日志: Java代码: public class Splash extends Activity { MyLicenseCheckerCallback mLicenseCheckerCallback; LicenseChecker mChecker; byte[] SALT = new b
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();
}
}
这是我得到的另一个代码,它可以解决我的问题。但我不知道该把它放在哪里
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);
在等待正式解决方案时,当前的解决方案包括修补Google的LicenseChecker类
com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)
像这样:
new String(
- Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
+ Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")))
+ .setPackage("com.android.vending"), // this fix the 'IllegalArgumentException: Service Intent must be explicit'
this, // ServiceConnection.
用语句setPackage(“com.android.vending”)添加包名可以明确目的,即“安全”(根据android棒棒糖的要求)
注意:
请注意,在修改LicenseChecker类后,必须将min sdk版本从3更改为4(谢谢)
来源:
您的目标是gradle中的api 21吗?首先发布日志,其次我认为隐式意图不再受支持。我面临同样的问题。可能重复谢谢!我花了几个小时试图找到解决办法。通过Ctrl键点击“mChecker.checkAccess(mlicenceckercallback);”-Ctrl键点击checkAccess,您将在Android Studio中找到需要修复的位置。我认为这个答案应该被接受为正确的答案。正确的解决方案是,如果谷歌升级了他们的库并将它们迁移到gradle,那么……为我工作。请注意,在修改LicenseChecker类后,您必须将min sdk版本从3更改为4(@Pascal您应该在您的消息中警告用户)@Billda让lvl在android studio中工作不需要所有这些手动破解……让它一起谷歌。
new String(
- Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
+ Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")))
+ .setPackage("com.android.vending"), // this fix the 'IllegalArgumentException: Service Intent must be explicit'
this, // ServiceConnection.