[转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...
本文转自:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html
前言
近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流!
关键字:Android动态加载
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com
Android中文Wiki:http://wikidroid.sinaapp.com
正文
一、前提
目的:动态加载SD卡中Apk的类。
注意:被加载的APK是未安装的。
相关:本文是本博另外一篇文章:Android动态加载jar/dex的升级版。
二、准备
准备被调用Android工程:TestB
ITest
String getMoney();
}
TestBActivity
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public String getMoney() {
return "1";
}
}
代码说明:很简单的代码。将生成后的TestB.apk拷贝到SD卡的根目录下。
三、调用
调用工程TestA
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String path = Environment.getExternalStorageDirectory() + "/";
String filename = "TestB.apk";
DexClassLoader classLoader = new DexClassLoader(path + filename, path,
null, getClassLoader());
try {
Class mLoadClass = classLoader.loadClass("com.nmbb.TestBActivity");
Constructor constructor = mLoadClass.getConstructor(new Class[] {});
Object TestBActivity = constructor.newInstance(new Object[] {});
Method getMoney = mLoadClass.getMethod("getMoney", null);
getMoney.setAccessible(true);
Object money = getMoney.invoke(TestBActivity, null);
Toast.makeText(this, money.toString(), Toast.LENGTH_LONG).show();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
执行的时候可以发现会自动生成TestB.dex文件。动态加载方面还可以搜索一下"Java动态加载"方面的资料,很有参考价值。可以发现比Android动态加载jar/dex使用起来方便得多。
四、下载
TestA.zip
TestB.zip
五、注意
6.1 别忘了加上SDCARD的写权限:
android.permission.WRITE_EXTERNAL_STORAGE
6.2 同样注意,不要再两个工程包含package和名称相同的接口,否则报错。(参见Android动态加载jar/dex的后期维护)
六、扩展阅读
探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
(强烈推荐:QQ游戏动态调用Activity的方法:通过ClassLoader,loadClass Activity类,然后分别在主工程的onDestroy、onKeyDown、onPause、onRestart、onResume等生命周期方法中反射调用(Method、invoke)子工程的类方法来模拟实现整个生命周期。此外巧妙的通过解压缩APK文件来获取游戏的资源)
Android中文Wiki:DexFile
七、缺点
6.1 由于是使用反射,无法取得Context,也就是TestBActivity与普通的类毫无区别,没有生命周期。
八、推荐
Android版 程序员专用搜索
结束
忙着换工作、忙着把翻译组转动Wiki平台、忙着推广翻译组...忙这忙那的,博客已经有近2个月没有写Android方面的文章,终于又可以回来,继续挤时间来写博客,与大家一同探讨与分享。
转载于:https://www.cnblogs.com/freeliver54/archive/2012/06/26/2563053.html
[转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...相关推荐
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...
前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...
前言 Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://ov ...
- Android音视频学习系列(九) — Android端实现rtmp推流
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- 写给Android App开发人员看的Android底层知识合集(1-8)
写给Android App开发人员看的Android底层知识合集(1-8) 转自包老师:http://www.cnblogs.com/Jax/p/6864103.html 写给Android App开 ...
- android Java开发设计模式及在android中的应用解析
android Java开发设计模式及在android中的应用解析 什么是设计模式: 可以用一句话概括设计模式---设计模式是一种利用OOP的封闭.继承和多态三大特性,同时在遵循单一职责原则.开闭原则 ...
- Android开发之动态加载,运行未安装apk
Android运行未安装apk可以使用Android的DexClassLoader类 这个也可以再Android的官方文档中看到 A class loader that loads classes f ...
- java实现图形界面输入半径求圆面积_测试开发工程师系列之Android自动化测试Appium(Python)连载(7)安卓图形界面...
安卓图形界面 UI即User Interface(用户界面)的简称.泛指用户操作界面,包含移动APP,网页,智能穿戴设备等.Android用户界面测试,要测试应用程序如何与一个真实的用户交互.这种测试 ...
- Android应用开发提高篇(2)-----文本朗读TTS(TextToSpeech)
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/26/2368696.html 一.概述 TextToSpeech,就是将文本内容转换成语音,在其 ...
- 学Android移动开发 第1章 Android基础入门
文章目录 1.1 Android简介 什么是Android Android和iOS主要区别 1.1.1 通信技术 1.1.2 Android起源 1.1.3 Android体系结构 1.1.4 Dal ...
最新文章
- Silverlight 参考:KeyEventArgs.Handled 属性
- python压缩包怎么安装-详解python解压压缩包的五种方法
- reciprocity
- .NET Core 3.0之深入源码理解Kestrel的集成与应用(二)
- 前端学习(3313):redux的基本操作
- linux 安装git失败,Linux运维知识之linux下安装git常见故障整理
- 黑苹果oc和clover哪个好?优势介绍 OpenCore Configurator for Mac中文版v2.16.1.0
- 做网管这么久了,每个月只是拿1000元的工资
- 腾讯“云+未来”峰会亮相山城,助力重庆成为数字中国新标杆
- mysql读写分离实现_laravel 配置MySQL读写分离
- 2021年Web前端开发的趋势有哪些
- python计算机视觉pdf百度云下载_Python计算机视觉编程(pdf+epub+mobi+txt+azw3)
- 三角函数π/2转化_分析最简单的正弦和余弦三角函数的图像
- token什么意思中文在C语言中,token是什么意思(token的含义及使用方法)
- 实战——登陆注册管理后台
- 万能Ghost系统制作教程(转)
- 常用的html标签及用法,html常用标签及其属性用法
- 攻防世界逆向高手题之dmd-50
- 基于eNSP加防火墙的千人中型校园/企业网络规划与设计(一步一步走)
- 订单退款与退款失败任务重试
热门文章
- mockjs json数组找不到_【接口测试】JSON 断言中的JSON Path
- 列名 userid 不明确。 表结构_SQL-Server(三)表的创建和操作
- opc 多点位一次性读_如何使用Excel通过OPC访问WinCC的实时数据
- 从小白到大数据人工智能专家的学习历程-送100G学习资料
- java输出各国人的问候语_世界各国问候语及发音.doc
- python直接使用pyc_关于python包,模块,.pyc文件和文件导入理解
- Hadoop权威指南(中文版,第2版)【分享】
- path的图片下拉效果
- 怎么安装python3.7 setuptools与pip_python3之安装、pip、setuptools
- 数据遍历打印得小列子