Android插件技术——(二)加载已安装apk
16lz
2021-01-26
上一篇我们了解了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获取其上下文,自然也就无法获取其资源,所以只能通过别的手段来解决这个问题,下一篇再叙。
更多相关文章
- Android开发过程遇到的安装好的APP打开程序崩溃,或者安装后应用列
- Android之获得已安装程序列表
- webview html页面加载本地js及img src(一)
- Android环境搭建2 ndk环境搭建
- 在mac上无法使用Android(安卓)Studio的解决方法
- UIRecorder录制android APP自动化脚本
- Android安装应用失败UID 和 PID
- 在Eclipse中使用sequoyah插件配置Android(安卓)NDK环境
- Android(安卓)安装apk时,报错 Failure [INSTALL_FAILED_TEST_ONLY