【发布时间】:2014-12-16 17:32:22
【问题描述】:
我需要一个 jar 文件位于 Android 项目的 main/assets 目录中。重要的是 jar 文件位于那里。
在我的主要 Android 项目中,有没有办法在我的代码中引用这个 jar 文件并使用它的类?
需要明确的是,我不想在编译后将 jar 添加到主项目中。
编辑:我尝试了下面的链接,它似乎加载了我所说的 Class 文件。但我正在努力如何为动态加载的类定义构造函数参数。
android-custom-class-loading-sample
EDIT2
快到了。我已经确认该类是从我的 classes.jar 加载的。不过,我一直在实例化它。
在 licenseValidatorClazz.getConstructor 行上,我收到以下错误。我猜我的接口文件中缺少某些内容?
java.lang.NoSuchMethodException:[接口 com.google.android.vending.licensing.Policy,接口 com.google.android.vending.licensing.DeviceLimiter,接口 com.google.android.vending.licensing.LicenseCheckerCallback,int , 类 java.lang.String, 类 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();
}
我有一个接口,其中包含要传递给加载的类的函数。
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();
}
【问题讨论】:
-
您使用的是哪个构建工具?
-
我正在使用 Android Studio。
标签: java android jar import external