您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Android >> APK动态加载的问题

APK动态加载的问题

来源:网络整理     时间:2016/8/1 18:39:59     关键词:

关于网友提出的“ APK动态加载的问题”问题疑问,本网通过在网上对“ APK动态加载的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: APK动态加载的问题
描述:

根据网上的这篇文章http://blog.csdn.net/singwhatiwanna/article/details/39937639,我想从a.apk中动态加载b.apk中的一个Fragment,在a.apk中的Activity中已经重写了这三个方法
@Override
public AssetManager getAssets() {
if(mCurrentPackage == null ||
!mResources.containsKey(mCurrentPackage))
return super.getAssets();
else {
return mResources.get(mCurrentPackage).getAssetManager();
}
}
@Override
public Resources getResources() {
if(mCurrentPackage == null ||
!mResources.containsKey(mCurrentPackage))
return super.getResources();
else {
ResourceWarp wrapResourceWarp = mResources.get(mCurrentPackage);
return wrapResourceWarp.getResources();
}
}
@Override
    public Theme getTheme() {
        if(mCurrentPackage == null ||
!mResources.containsKey(mCurrentPackage))
return super.getTheme();
else {
ResourceWarp wrapResourceWarp = mResources.get(mCurrentPackage);
return wrapResourceWarp.getTheme();
}
   根据当前需加载的包名,自动返回资源,但是在b.apk中的Fragment的方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle saveInstanceState) {
super.onCreateView(inflater, container, saveInstanceState);
View view = inflater.inflate(R.layout.test_appbase, container, false);
ImageView imgView = (ImageView)getView().findViewById(R.id.imageView1);
return view;
}
运行到ImageView imgView = (ImageView)getView().findViewById(R.id.imageView1);处会出错,无法找到R.id.imageView1,但是View view = inflater.inflate(R.layout.test_appbase, container, false);
这句代码又能通过


解决方案1:

引用 2 楼 zlc_168 的回复:
上面的问题解决了,现在是无法确定对象的类型。比如我在a项目中定义了基类appBase,然后再b项目中定义了testBase extends appBase,通过反射从b.apk中加载出对象testBase,然后用 testBase的实例对象 instanceof appBase,都返回false,不知道是什么原因

虽然它们的类名称一样,查是他们的classloader不一样。理解这个需要对classloader有一定理解,下面这篇文章有讲到你这种情况,你可以看下。
http://www.alloyteam.com/2014/04/android-cha-jian-yuan-li-pou-xi/ 解决方案2:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle saveInstanceState) {
super.onCreateView(inflater, container, saveInstanceState);
View view = inflater.inflate(R.layout.test_appbase, container, false);
ImageView imgView = (ImageView) view.findViewById(R.id.imageView1);
return view;
}
ImageView imgView = (ImageView) view.findViewById(R.id.imageView1);  这里要用view.findViewById();

解决方案3:

无法找到?  确定布局文件里有没有


以上介绍了“ APK动态加载的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3060894.html

相关图片

相关文章