应用插件化实践--DroidPlugin插件 在Eclipse上开发Demo
来源:互联网 发布:javascript 是否是数组 编辑:程序博客网 时间:2024/05/29 19:56
DroidPlugin 是360开源的插件化框架
插件化开发是目前Android开发的一种趋势,很感谢越来越多的人分享插件化开发的框架和资料。
最近在研究DroidPlugin,收益匪浅。
Github的地址请点这里。
1. 插件化的两个最重要的用途
1.1项目模块拆分、解耦
用插件化拆分项目就等于开发了多个apk但在手机上只安装了一个主apk,相比较在应用内用module的方法拆分的方法,插件化在不同项目间调用时更复杂。
1.2.实现应用部分升级、秒装新功能
插件化优势明显。实现思路是,在宿主apk上准备好一个展示插件功能的入口,在服务端告诉自己有新插件时,展示出来,用户点击后用插件化框架加载出来,从而实现了用户不用升级客户端,仅仅通过加载插件的方式就可以完成更新。
2. 在Eclipse上开发宿主的Demo,可参考
2.1 主要功能及演示
(1)插件安装后可直接启动
(2)宿主的权限多于插件的权限
(3)实现扫描本地Download文件夹下的插件文件。(将插件apk文件放在手机根目录下的Download文件夹或360Download文件夹)
2.2 使用Eclipse开发工具(不需要过多环境配置的情况)
(1)主页ViewPager
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(new FragmentAdapter(this.getSupportFragmentManager())); }
public class FragmentAdapter extends FragmentPagerAdapter {private static final String[] TITLES = {"已安装","未安装"};private static final String TAG = FragmentAdapter.class.getSimpleName();public FragmentAdapter(FragmentManager fm) {super(fm);// TODO Auto-generated constructor stub}@Overridepublic Fragment getItem(int position) { if (position == 0) { return new InstalledFragment(); // 已安装页 } else { return new StoreFragment(); // 想要安装页 }}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn TITLES.length;}@Override public CharSequence getPageTitle(int position) { return TITLES[position]; }}
(2)加载页 StoreFragment
主要扫描本地文件夹获取插件资源。
private void startLoadInner() {handler.post(new Runnable() {@Overridepublic void run() {setListShown(true);}});if (!isViewCreated) {return;}new Thread("ApkScanner") {@Overridepublic void run() {File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);List<File> apks = new ArrayList<File>(10);File[] files = file.listFiles();if (files != null) {for (File apk : files) {if (apk.exists()&& apk.getPath().toLowerCase().endsWith(".apk")) {apks.add(apk);}}}file = new File(Environment.getExternalStorageDirectory(),"360Download");if (file.exists() && file.isDirectory()) {File[] files1 = file.listFiles();if (files1 != null) {for (File apk : files1) {if (apk.exists()&& apk.getPath().toLowerCase().endsWith(".apk")) {apks.add(apk);}}}}PackageManager pm = getActivity().getPackageManager();for (final File apk : apks) {try {if (apk.exists()&& apk.getPath().toLowerCase().endsWith(".apk")) {final PackageInfo info = pm.getPackageArchiveInfo(apk.getPath(), 0);if (info != null && isViewCreated) {try {handler.post(new Runnable() {@Overridepublic void run() {adapter.add(new ApkItem(getActivity(), info, apk.getPath()));}});} catch (Exception e) {}}}} catch (Exception e) {}}}}.start();}
(3)启动页 InstalledFragment
加载插件
private void startLoad() { new Thread("ApkScanner") { @Override public void run() { try { final List<PackageInfo> infos = PluginManager.getInstance().getInstalledPackages(0); final PackageManager pm = getActivity().getPackageManager(); for (final PackageInfo info : infos) { handler.post(new Runnable() { @Override public void run() { adapter.add(new ApkItem(pm, info, info.applicationInfo.publicSourceDir)); } }); } } catch (RemoteException e) { e.printStackTrace(); } handler.post(new Runnable() { @Override public void run() { setListShown(true); } }); } }.start(); }
Demo的地址:http://download.csdn.net/detail/xaioxaio/9573076
0 0
- 应用插件化实践--DroidPlugin插件 在Eclipse上开发Demo
- 应用插件化实践--DroidPlugin的使用
- 应用插件化实践--DroidPlugin的使用
- 插件化开发--DroidPlugin
- 运行"使用DroidPlugin实践应用的插件化"里面demo碰到的问题(附个人解决方案)
- 【Android实战】DroidPlugin插件化应用分析
- 360黑科技插件开发框架 DroidPlugin demo 下载
- Android 插件化框架DroidPlugin
- 插件化开发---DroidPlugin对广播的管理
- 插件化开发---DroidPlugin对Servie的管理
- Git在Eclipse上的应用--Egit插件--(一)
- Git在Eclipse上的应用--Egit插件--(二)
- Git在Eclipse上的应用--Egit插件--(三)
- Android Plugin 插件化技术:DroidPlugin
- [Android 插件化(二)] DroidPlugin 用法
- 插件化之DroidPlugin深度hook
- Android 插件化之DroidPlugin 用法
- DroidPlugin 360插件机制
- UVA - 550 Multiplying by Rotation
- redis的pipeline测试分析
- Skyline开发培训
- 《JAVA集合中的Map接口》
- Object转byte[]←→byte[]转Object
- 应用插件化实践--DroidPlugin插件 在Eclipse上开发Demo
- 每日下班试题
- GitHub上值得关注的iOS开源项目
- UVA - 568 Just the Facts
- 【Python学习笔记】IO编程
- NYOJ-快速查找素数
- 关于下载JDK及配置环境变量一些细节
- skyline pro培训
- UVA - 408 Uniform Generator