Ich brauche eine JAR-Datei in einem Haupt/Assets-Verzeichnis in einem Android-Projekt. Es ist wichtig, dass sich die JAR-Datei dort befindet.Wie behalte ich eine JAR-Datei extern, benutze aber trotzdem ihre Klassen in meinem Android-Projekt?
Mit meinem Android-Projekt gibt es eine Möglichkeit, diese Jar-Datei in meinem Code zu referenzieren und seine Klassen zu verwenden?
Um klar zu sein Ich möchte nicht das Glas zum Hauptprojekt einmal kompiliert hinzufügen.
BEARBEITEN: Ich habe versucht, den Link unten und es scheint, die Class-Datei, die ich angegeben habe, zu laden. Aber ich versuche, Konstruktorargumente für die dynamisch geladene Klasse zu definieren.
android-custom-class-loading-sample
EDIT2
es fast. Ich habe bestätigt, dass die Klasse aus meinem classes.jar geladen wurde. Ich stecke es jedoch fest.
In der Zeile licenseValidatorClazz.getConstructor erhalte ich den Fehler unten. Ich vermute, dass ich etwas aus meiner Interface-Datei vermisse?
java.lang.NoSuchMethodException: [interface com.google.android.vending.licensing.Policy, Schnittstelle com.google.android.vending.licensing.DeviceLimiter, Schnittstelle com.google.android.vending.licensing.LicenseCheckerCallback, int, Klasse java.lang.String, Klasse java.lang.String]
public Class licenseValidatorClazz = null;
public LicenseValidator validator;
...
// Initialize the class loader with the secondary dex file.
DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
optimizedDexOutputPath.getAbsolutePath(),
null,
mContext.getClassLoader());
try {
// Load the library class from the class loader.
licenseValidatorClazz = cl.loadClass("com.google.android.vending.licensing.LicenseValidator");
validator = (LicenseValidator) licenseValidatorClazz.getConstructor(Policy.class,DeviceLimiter.class,LicenseCheckerCallback.class,int.class,String.class,String.class).newInstance(ddd, new NullDeviceLimiter(),
callback, generateNonce(), mPackageName, mVersionCode);
} catch (Exception exception) {
// Handle exception gracefully here.
exception.printStackTrace();
}
ich habe eine Schnittstelle, die die Funktionen enthält, die der geladenen Klasse zu übergeben.
public interface LicenseValidator
{
public LicenseCheckerCallback getCallback();
public int getNonce();
public String getPackageName();
public void verify(PublicKey publicKey, int responseCode, String signedData, String signature);
public void handleResponse(int response, ResponseData rawData);
public void handleApplicationError(int code);
public void handleInvalidResponse();
}
welche Build-Tool verwenden Sie? – AesSedai101
Ich benutze Android Studio. – zeroprobe