У меня есть APK с class
, расширяющим абстрактный класс AbstractPluggableViews
. AbstractPluggableViews
дочерний класс вызывает изображение png в ImageView
. Однако во время выполнения я загружаю другое изображение в ImageView
, отличное от того, которое я вызывал.
Даже ImageView.setColorFilter()
и ImageView.setBackgroundColor()
не дают намеченных цветов.
Это дочерний класс плагинов:
public class MyPluginClass extends AbstractPluggableViews {
private Context mContext;
public MyPluginClass(Context mContext) {
super(mContext);
this.mContext = mContext;
}
@Override
public ImageView getMyPluginView() {
int imageSize = 100;
ImageView imageView = new ImageView(mContext);
imageView.setColorFilter(mContext.getResources().getColor(R.color.my_teal_dark));
imageView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.my_default_background));
imageView.setLayoutParams(new LinearLayout.LayoutParams(imageSize, imageSize));
Picasso.get()
.load(R.drawable.ic_contacts_black_48dp)
.resize(imageSize, imageSize)
.centerCrop()
.into(imageView);
return imageView;
}
}
Так я вызываю и создаю экземпляры классов, используя DexClassLoader
:
public class LoadedPlugin {
final private Context baseContext;
final private PluginContext pluginContext;
final private String apkPath;
final private DexClassLoader dexClassLoader;
final private AbstractPluggableViews abstractPluggableViews;
public LoadedPlugin(Context context, String _apkPath) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
this.baseContext = context;
this.apkPath = _apkPath;
File codeCacheDir;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
codeCacheDir = context.getCodeCacheDir();
} else {
codeCacheDir = context.getCacheDir();
}
dexClassLoader = new DexClassLoader(apkPath, codeCacheDir.getAbsolutePath(), null, context.getClassLoader());
pluginContext = new PluginContext(baseContext, apkPath);
File apkFile = new File(apkPath);
String apkName = apkFile.getName().replace(".apk", "").toLowerCase();
String viewCreatorClassName = "com.my_app." + apkName + ".MyPluginClass";
Class myClass = dexClassLoader.loadClass(viewCreatorClassName);
Constructor constructor = myClass.getConstructor(Context.class);
abstractPluggableViews = (AbstractPluggableViews) constructor.newInstance(pluginContext);
}
public AbstractPluggableViews getAbstractPluggableViews() {
return abstractPluggableViews;
}
}