2014年4月22日星期二

Android类装载器DexClassLoader的简单使用-----制作android插件的前奏 - David小硕

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Android类装载器DexClassLoader的简单使用-----制作android插件的前奏 - David小硕  阅读原文»

声明:此篇文章借鉴《android内核剖析》整理得来。

一、装载器简介

  “类装载器”(ClassLoader),顾名思义,就是用来动态装载class文件的。标准的Java SDK中有个ClassLoader类,借助此类可以装载需要的class文件,前提是

ClassLoader类初始化必须制定class文件的路径。

  import关键字引用的类文件和ClassLoader动态加载类的区别:

    import引用类的两个特点:1、必须存在于本地,当程序运行该类时,内部类装载器会自动装载该类。

                 2、编译时必须在现场,否则编译过程会因找不到引用文件而不能正常编译。

    classLoader的特点正好于import相反,而且更自由灵活。

  每一个ClassLoader必须有一个父ClassLoader,在装载Class文件时,子ClassLoader会先请求其父ClassLoader加载该文件,只有当其父ClassLoader找不到该文件时,子ClassLoader才会继承装载该类。这是一种安全机制。对于Android而言,最终的apk文件包含的是dex类型的文件,dex文件是将class文件重新打包,打包的规则又不是简单地压缩,而是完全对class文件内部的各种函数表,变量表进行优化,产生一个新的文件,即dex文件。因此加载这种特殊的Class文件就需要特殊的类加载器DexClassLoader。

二、DexClassLoader的方法的实用

  假设有两个apk,第一个叫做Host,第二个叫Plugin。Plugin中第一个一个类Plugin,该类中定义了一个addition函数。

  

1 package com.david.plugin;
2
3 import android.util.Log;
4
5 public class Plugin {
6
7 private static final String TAG=Plugin.class.getSimpleName();
8
9 public Plugin(){
10 Log.i(TAG, "PluginClass is initialized");
11 }
12
13 public int addition(int a,int b){
14 return a+b;
15 }
16
17 }

  plugin的apk中AndroidManifest文件中,activity必须声明一个action。

1 <activity
2 android:name="com.david.plugin.MainActivity"
3 android:label="@string/app_name" >
4 <intent-filter>
5 <action android:name="com.david.plugin.client"/>
6 <action android:name="android.intent.action.MAIN" />
7 <category android:name="android.intent.category.LAUNCHER" />
8 </intent-filter>
9 </activity>

  将plugin.apk装载进Android设备中。Host.apk中主activity调用的代码如下:

1 package com.david.host;
2
3 import java.lang.reflect.InvocationTargetException;
4 import java.lang.reflect.Method;
5 import java.util.List;
6
7 import dalvik.system.DexClassLoader;
8 import android.support.v7.app.ActionBarActivity;
9 import android.annotation.SuppressLint;
10 import android.content.Intent;
11 import android.content.pm.ActivityInfo;
12 import android.content.pm.PackageManager;
13 import android.content.pm.ResolveInfo;
14 import android.os.Bundle;
15 import android.view.View;
16 import android.view.View.OnClickListener;
17 import android.widget.Button;
18
19
20 public class MainActivity extends ActionBarActivity implements OnClickListener{
21
22 private static final String plugin_package = "com.david.plugin.client";
23 private PackageManager pm;
24 private ResolveInfo resolveInfo;
25 private Button btn_classLoader;
26
27 @Override
28 protected void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_main);
31 // useDexClassLoader();
推荐--《Android深入浅出》 - 承香墨影  阅读原文»



基本信息

  • 书名:Android深入浅出
  • 作者:张� 著
  • 纸书页数: 661
  • 出版社: 机械工业出版社; 第1版 (2014年4月17日)
  • 语种: 简体中文
  • ASIN: B00JR3P8X0
  • 品牌: 北京华章图文信息有限公司

推荐理由

以前一直在博客园发表Android相关的技术博客,经过一年多的精心准备,《Android深入浅出》一书终于出版。这是一本基于Android 4.x SDK,用其来开发Android应用。本书不仅能让你掌握Android应用开发所需要具备的基本知识,还会对Android 4.x开始的一些新特性做详细的介绍。本书由浅入深,从Android环境的搭建,到每个Android组件的原理以及使用都做了非常详尽的讲解,非常适合初学者进行系统的学习。同时,本书的内容也十分丰富,可以当做Android开发人员的参考手册来使用。

本书主要是写给对Android感兴趣的开发人员,为了使他们能够更快速的理解Android的组件以及原理,在本书的内容中,均为对应章节的内容提供了充分的示例程序。这些示例程序首先将教您如何使用Android的内容,然后解释其工作原理。本书将帮助读者从最基本的Android组件的使用以及原理入手,使读者充分理解Android SDK的底层架构与运行原理。但是Android开发是一个宏大的主题,任何一本都不可能面面俱到的介绍有关Android开发的全部内容,可我相信通过对本书的通读,将有充分的知识储备应对任何与Android开发相关的技术难点。

前言-主要内容

  本书涵盖了使用Android SDK进行Android开发的基本概念,共分为19个章节。

  “第一章 Android应用开发概述”介绍了Android系统的发展历史以及现如今的状况,并介绍了Android的系统结构以及Dalvik VM与JVM的区别和Android系统的优势,最后简单介绍了Android应用开发涉及到的几个基本组件。

  “第二章 第一个Android应用程序”介绍了如何搭载Android的开发环境,以及如何使用Android SDK提供的工具协助Android的开发,最后将以一个简单的HelloWord应用讲解Android项目的目录结构。

  “第三章 Android的UI编程”介绍了AndroidUI编程所涉及到的内容,包括在Android下如何进行UI编程、几种UI布局的使用、SDK中包含的UI组件的基本使用等等。

  “第四章 事件处理机制”介绍了Android应用开发的事件处理机制,其中包括Android下基于监听和基于回调两种事件处理机制的详细内容,最后还简单讲解了Android系统设置被改变后如何进行相应。

  “第五章 深入理解Activity”介绍了Android四大组件之一的Activity,Activity主要用于承载UI组件,该章中涉及到Activity的使用以及配置、Activity的生命周期、Activity状态的保存与恢复、Activity的回退栈以及Activity的启动模式,最后还简单的对Fragment这个Android的新特性做了详细的介绍。

  “第六章 Intent和IntentFilter”介绍了如何在Android中使用Intent开启一个新的组件或者传递一段信息,并且详细介绍了Intent各个属性的具体含义,以及如何使用IntentFilter这个意图过滤器。最后以几个简单的示例讲解如何使用Intent调用系统应用协助工作,帮助读者更好的理解Intent和IntentFilter的工作原理。

  “第七章 消息通知”介绍了在Android下如何将一段信息提示给用户知晓,其中涉及到Toast消息提示以及Notification消息提示。

  “第八章 菜单”介绍了Android下菜单的使用,并在最后详细介绍了ActionBar这个Android的新特性。

  “第九章 对话框”介绍了Android下如何使用对话框,其中涉及到对对话框的基本内容的讲解,以及警告对话框、进度对话框的基本使用。

  “第十章 日志与测试”介绍了在Android下如何使用在应用运行的时候,实时的输入日志信息,以及如何使用JUnitTest这个单元测试框架,对Android应用程序进行白盒测试。

  “第十一章 数据持久化”介绍了在Android应用程序中保存或存储数据。其中涉及到SharedPreferences保存配置信息、内部存储、外部存储、缓存存储以及SQLite这个轻量级的文件型数据库的使用。

  “第十二章 Android的网络访问”介绍了Android应用程序如何与Web服务器进行交互,并简单介绍了与Web服务器交互传递的数据解析,其中包括常用的JSON和XML的解析。

  “第十三章 Android的多线程”介绍了如何在Android应用程序中使用多线程的内容,其中涉及到一些多线程的内容、异步任务(AsyncTask)以及Handler的知识。

  “第十四章 服务(Service)”介绍了Android四大组件之一的Service组件,在其中详细介绍了Service的基础内容,包括Service的使用、Service的配置、Service的分类以及Service使用过程中的一些注意事项。最后还详细的介绍了如何在进程间调用服务,AIDL服务的使用。

  “第十五章 内容提供者(ContentProvider)”介绍了Android四大组件之一的ContentProvider组件,其中包括ContentProvider的基本内容,以及如何使用ContentProvider暴露出应用程序的数据,并且如何使用ContentObserver调用其它应用程序暴露出来的数据。最后还在ContentProvider的基础上讲解了装载机(Loader)这个Android新特性的内容。

  “第十六章 广播接收器(BroadcastReceiver)”介绍了Android四大组件之一的BroadcastReceiver组件,其中包括BroadcastReceiver的分类、如何注册BroadcastReceiver、如何发送一个广播,最后介绍了如何拦截系统事件的广播。

  “第十七章 图形与图像处理”介绍了Android应用中如何处理图形与图像的内容,其中包括图片资源的使用、对现有的图片进行绘图、变换等操作。最后还讲解了Android对动画效果的支持。

  “第十八章 多媒体应用开发”介绍了如何在Android应用中使用多媒体的内容,其中包括如何播放一段音频、视频,如何使用相机获取照片以及如何录制一段音频或者视频。

  “第十九章 Android应用的资源”介绍了如何使用Android应用程序中定义的一些资源文件,其中包括资源的类型以及访问方式的介绍,以及各项资源的详细使用。

目录

《Android深入浅出》... 1

1 Android应用开发概述... 9

1.1 Android发展史与现状... 9

1.2 Android的系统架构与特性... 10

1.2.1 Android系统架构... 10

1.2.2 Dalvik VM和JVM的区别... 12

1.2.3 Android系统平台的优势... 13

1.3 Android应用的基本组件... 14

1.3.1 活动(Activity)... 14

1.3.2 服务(Service)... 15

1.3.3 广播接收器(BroadcastReceiver)... 15

1.3.4 内容提供者(ContentProvider)... 15

1.3.5 意图(Intent)... 16

1.4 小结... 16

2 第一个Android应用程序... 16

2.1 搭载Android的开发环境... 16

2.1.1 安装Eclipse和ADT. 16

2.1.2 下载其它版本的Android SDK. 18

2.2 创建模拟器(AVD)... 21

2.3 Android版的HelloWord. 25

2.4 Android项目结构分析... 29

2.4.1 Android项目的目录结构... 29

2.4.2 自动生成的R.java. 31

2.4.3 清单文件AndroidManifest.xml 31

2.5 DDMS调试环境... 33

2.6 小结... 35

3 Android的UI编程... 36

3.1 UI概述... 36

3.2 使用UI组件... 37

3.2.1 UI的常用属性及方法... 37

3.2.2 XML布局文件定义UI组件... 38

3.2.3 Java代码动态定义UI组件... 40

3.3 UI布局... 42

3.3.1 布局基类(ViewGroup)... 42

3.3.2 线性布局(LinearLayout)... 43

3.3.3 帧布局(FrameLayout)... 45

3.3.4 相对布局(RelativeLayout)... 47

3.3.5 表格布局(TableLayout)... 49

3.3.6 绝对布局(AbsoluteLayout)... 51

3.4 基本UI组件... 53

3.4.1 文本框(TextView)... 53

3.4.2 编辑框(EditText)... 61

3.4.3 按钮(Button)... 68

3.4.4 单选、复选按钮(RadioButton、CheckBox)... 75

3.4.5 开关按钮(ToggleButton、Switch)... 82

3.4.6 进度条组件(ProgressBar)... 85

3.4.7 日期、时间相关组件... 96

3.4.8 图像控件(ImageView)... 104

3.5 高级UI组件... 107

3.5.1 数据适配器(Adapter)浅析... 107

3.5.2 自动完成文本框(AutoCompleteTextView)... 109

3.5.3 列表选择组件(Spinner)... 113

3.5.4 列表视图(ListView)... 121

3.5.5 网格视图组件(GridView)... 128

3.5.6 滚动视图组件(ScrollView)... 135

3.5.7 图片切换器(ImageSwitcher)... 137

3.5.8 惰性装载组件 (ViewStub) 141

3.5.9 网络视图(WebView)... 145

3.6 小结... 149

4 事件处理机制... 149

4.1 Android的事件处理机制... 149

4.2 基于监听器的事件处理... 150

4.2.1 基于监听器的事件处理模型... 150

4.2.2 内部类实现事件监听器... 152

4.2.3 外部类实现事件监听器... 153

4.2.4 Activity本身作为事件监听器... 154

4.2.5 匿名内部类作为事件监听器... 155

4.2.6 使用XML属性设置事件处理器... 157

4.3 基于回调的事件处理... 158

4.3.1 回调机制... 159

4.3.2 基于回调的事件传播... 160

4.4 响应系统设置事件... 162

4.4.1 Configuration简介... 162

4.4.2 监听系统设置的更改... 163

4.5 小结... 165

5 深入理解Activity. 166

5.1 Activity基础... 166

5.1.1 Activity简介... 166

阅读更多内容

没有评论:

发表评论