上一篇我们了解了Android中动态加载插件jar,然而实际插件运用中,往往是Android主apk动态加载一个甚至任意个插件apk,这个插件apk可以是已安装的或未安装的,功能也比单纯的jar更丰富。

本篇我们将讨论如何加载一个已安装的apk,获取其资源,并跳转至其Activity。

已安装的apk,系统会为其建立完整的”档案”,并提供了相应的api获取其context,从而可以方便地加载其资源,或跳转activity。直接上代码:

首先,Host工程如下:

public class MainActivity extends Activity {    private static final String PLUGIN_PACKAGE = "com.example.androidplugin";    private Context mPluginContext;    private Resources mPluginResources;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button btn = (Button) findViewById(R.id.btn);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                try {                    Class<?> clazz = mPluginContext.getClassLoader().loadClass(                            PLUGIN_PACKAGE + ".MainActivity");                    startActivity(new Intent(mPluginContext, clazz));                } catch (ClassNotFoundException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        });        loadInstalledApk();    }    private void loadInstalledApk() {        try {            mPluginContext = createPackageContext(PLUGIN_PACKAGE,                    Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);        } catch (NameNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        if (mPluginContext != null) {            mPluginResources = mPluginContext.getResources();            int resId = mPluginResources.getIdentifier("hello_world", "string", PLUGIN_PACKAGE);            String text = mPluginResources.getString(resId);            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();        }    }}

Plugin工程很简单,如下:

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

下一篇我们将探讨如何加载未安装的apk及其资源。未安装的apk由于系统毫不知情,因此也就无法通过api获取其上下文,自然也就无法获取其资源,所以只能通过别的手段来解决这个问题,下一篇再叙。

更多相关文章

  1. Android开发过程遇到的安装好的APP打开程序崩溃,或者安装后应用列
  2. Android之获得已安装程序列表
  3. webview html页面加载本地js及img src(一)
  4. Android环境搭建2 ndk环境搭建
  5. 在mac上无法使用Android(安卓)Studio的解决方法
  6. UIRecorder录制android APP自动化脚本
  7. Android安装应用失败UID 和 PID
  8. 在Eclipse中使用sequoyah插件配置Android(安卓)NDK环境
  9. Android(安卓)安装apk时,报错 Failure [INSTALL_FAILED_TEST_ONLY

随机推荐

  1. 如何改变Android(安卓)Progressbar默认颜
  2. Android游戏开发之旅七 自定义SurfaceVie
  3. Android导入工程出现 Project has no def
  4. android的文字识别OCR
  5. Activity跳转时 进入和出去的动画
  6. 使用镜像站同步android sdk
  7. Android(安卓)- Linkify 详解
  8. 3.addView调用之后导致子布局的android:l
  9. Android(安卓)图片处理 之 Bitmap
  10. Android(安卓)NDK r8e java.lang.Unsatis