2016-07-15 82 views
-5

我已經完成了SDK中的示例,現在在嘗試運行演示應用程序時收到以下錯誤。Android應用程序授權錯誤類未找到

引起:java.lang.ClassNotFoundException:未在路徑中找到類「com.rythmair.licenseverification.MainActivity」:DexPathList [[zip文件] /data/app/com.rythmair.licenseverification-2/base .apk文件「],nativeLibraryDirectories = [/供應商/ lib中/系統/ lib目錄]

這裏是我的全MainActivity

package com.rythmair.licenseverification; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.provider.Settings; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.android.vending.licensing.AESObfuscator; 
import com.google.android.vending.licensing.LicenseChecker; 
import com.google.android.vending.licensing.LicenseCheckerCallback; 
import com.google.android.vending.licensing.Policy; 
import com.google.android.vending.licensing.ServerManagedPolicy; 

public class MainActivity extends Activity { 

    String tag = "LICENSE: "; 

    private static final String BASE64_PUBLIC_KEY = "MY_KEY_REMOVED"; 

    // Generate your own 20 random bytes, and put them here. 
    private static final byte[] SALT = new byte[] { 
      -46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95, -45, 77, -117, -36, -113, -11, 32, -64, 
      89 
    }; 

    private TextView mStatusText; 
    private Button mCheckLicenseButton; 

    private LicenseCheckerCallback mLicenseCheckerCallback; 
    private LicenseChecker mChecker; 
    // A handler on the UI thread. 
    private Handler mHandler; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Log.i(tag, "Just in onCreate method."); 

     mStatusText = (TextView) findViewById(R.id.status_text); 
     mCheckLicenseButton = (Button) findViewById(R.id.check_license_button); 
     mCheckLicenseButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       doCheck(); 
      } 
     }); 

     mHandler = new Handler(); 
     Log.i(tag, "Just set mHandler to new Handler."); 
     // Try to use more data here. ANDROID_ID is a single point of attack. 
     String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 

     // Library calls this when it's done. 
     Log.i(tag, "Setting new mLicenseCheckerCallback"); 
     mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 

     // Construct the LicenseChecker with a policy. 
     Log.i(tag, "Setting mChecker variable."); 
     mChecker = new LicenseChecker(
       this, new ServerManagedPolicy(this, 
       new AESObfuscator(SALT, getPackageName(), deviceId)), 
       BASE64_PUBLIC_KEY); 
     doCheck(); 
    } 

    protected Dialog onCreateDialog(int id) { 
     final boolean bRetry = id == 1; 
     return new AlertDialog.Builder(this) 
       .setTitle(R.string.unlicensed_dialog_title) 
       .setMessage(bRetry ? R.string.unlicensed_dialog_retry_body : R.string.unlicensed_dialog_body) 
       .setPositiveButton(bRetry ? R.string.retry_button : R.string.buy_button, new DialogInterface.OnClickListener() { 
        boolean mRetry = bRetry; 
        public void onClick(DialogInterface dialog, int which) { 
         if (mRetry) { 
          doCheck(); 
         } else { 
          Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(
            "http://market.android.com/details?id=" + getPackageName())); 
          startActivity(marketIntent); 
         } 
        } 
       }) 
       .setNegativeButton(R.string.quit_button, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         finish(); 
        } 
       }).create(); 
    } 

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

    private void displayResult(final String result) { 
     mHandler.post(new Runnable() { 
      public void run() { 
       mStatusText.setText(result); 
       setProgressBarIndeterminateVisibility(false); 
       mCheckLicenseButton.setEnabled(true); 
      } 
     }); 
    } 

    private void displayDialog(final boolean showRetry) { 
     mHandler.post(new Runnable() { 
      public void run() { 
       setProgressBarIndeterminateVisibility(false); 
       showDialog(showRetry ? 1 : 0); 
       mCheckLicenseButton.setEnabled(true); 
      } 
     }); 
    } 

    private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
     public void allow(int policyReason) { 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      // Should allow user access. 
      displayResult(getString(R.string.allow)); 
     } 

     public void dontAllow(int policyReason) { 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      displayResult(getString(R.string.dont_allow)); 
      // Should not allow access. In most cases, the app should assume 
      // the user has access unless it encounters this. If it does, 
      // the app should inform the user of their unlicensed ways 
      // and then either shut down the app or limit the user to a 
      // restricted set of features. 
      // In this example, we show a dialog that takes the user to Market. 
      // If the reason for the lack of license is that the service is 
      // unavailable or there is another problem, we display a 
      // retry button on the dialog and a different message. 
      displayDialog(policyReason == Policy.RETRY); 
     } 

     public void applicationError(int errorCode) { 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      // This is a polite way of saying the developer made a mistake 
      // while setting up or calling the license checker library. 
      // Please examine the error code and fix the error. 
      String result = String.format(getString(R.string.application_error), errorCode); 
      displayResult(result); 
     } 
    } 

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

} 

在幫助我得到這個解決任何援助將不勝感激。

回答