directory search
android Manifest Manifest.permission Manifest.permission_group android.accessibilityservice AccessibilityService android.accounts Account android.app NotificationManager android.bluetooth BluetoothAdapter BluetoothClass BluetoothClass.Device BluetoothClass.Device.Major BluetoothClass.Service BluetoothDevice BluetoothServerSocket BluetoothSocket android.content SharedPreferences android.database.sqlite SQLiteCursorDriver SQLiteOpenHelper android.graphics Bitmap android.location LocationListener Geocoder GpsStatus GpsStatus.Listener GpsStatus.NmeaListener GpsSatellite android.media AudioFormat AsyncPlayer AudioRecord AudioRecord.OnRecordPositionUpdateListener ThumbnailUtils AudioManager android.net TrafficStats MailTo LocalSocket android.os AsyncTask AsyncTask.Status CountDownTimer Message MessageQueue HandlerThread android.text Html android.util JsonWriter android.view ContextMenu ContextMenu.ContextMenuInfo Display ViewManager View ViewStub ViewTreeObserver ViewParent WindowManager GestureDetector Gravity MenuInflater ScaleGestureDetector SoundEffectConstants android.view.inputmethod InputConnection InputMethod InputMethodSession BaseInputConnection InputMethodManager android.widget AbsListView AbsListView.LayoutParams AbsListView.OnScrollListener AbsListView.RecyclerListener AbsoluteLayout AbsoluteLayout.LayoutParams AbsSeekBar AbsSpinner AdapterView AdapterView.AdapterContextMenuInfo AdapterView.OnItemLongClickListener AdapterView.OnItemSelectedListener AdapterView.OnItemClickListener AnalogClock BaseAdapter BaseExpandableListAdapter Button CheckBox CheckedTextView Checkable Chronometer Chronometer.OnChronometerTickListener CompoundButton CompoundButton.OnCheckedChangeListener CursorAdapter CursorTreeAdapter DatePicker DatePicker.OnDateChangedListener DialerFilter DigitalClock EditText Filter Filter.FilterListener Filter.FilterResults ExpandableListAdapter ExpandableListView.OnChildClickListener ExpandableListView.OnGroupClickListener ExpandableListView.OnGroupCollapseListener ExpandableListView.OnGroupExpandListener Filterable Gallery Gallery.LayoutParams GridView GridLayout GridLayout.Alignment RadioGroup ImageView ImageView.ScaleType HorizontalScrollView ImageButton ImageSwitcher FilterQueryProvider ListAdapter ListView MediaController MultiAutoCompleteTextView MultiAutoCompleteTextView.CommaTokenizer MultiAutoCompleteTextView.Tokenizer QuickContactBadge RadioButton RatingBar RatingBar.OnRatingBarChangeListener RelativeLayout RemoteViews ResourceCursorAdapter ResourceCursorTreeAdapter Scroller ScrollView SearchView SearchView.OnCloseListener SearchView.OnQueryTextListener SearchView.OnSuggestionListener SeekBar SeekBar.OnSeekBarChangeListener SimpleAdapter SimpleAdapter.ViewBinder SimpleCursorAdapter SimpleCursorAdapter.CursorToStringConverter SimpleCursorAdapter.ViewBinder SimpleCursorTreeAdapter SimpleCursorTreeAdapter.ViewBinder SimpleExpandableListAdapter SlidingDrawer SlidingDrawer.OnDrawerCloseListener SlidingDrawer.OnDrawerOpenListener SlidingDrawer.OnDrawerScrollListener Spinner SpinnerAdapter WrapperListAdapter TabHost TabHost.TabSpec TextView TimePicker TimePicker.OnTimeChangedListener Toast TableLayout TableLayout.LayoutParams TableRow TableRow.LayoutParams TabWidget TextSwitcher ToggleButton TwoLineListItem VideoView ViewAnimator ViewFlipper ViewSwitcher ViewSwitcher.ViewFactory ZoomButtonsController ZoomButtonsController.OnZoomListener ZoomButton ZoomControls dalvik.system DexFile
characters


DexFile

版本:Android 4.0 r1

 

结构

继承关系

public final class DexFile extends Object

        

java.lang.Object

dalvik.system.DexFile

 

类概述

操作DEX文件。这个类原理上和ZipFile相似。主要在类装载器里被使用。

注意,我们不直接打开和读取DEX文件。它们被虚拟机以只读方式映射到内存了。

 

构造函数

public DexFile (File file)

通过指定的File对象打开DEX文件。指定的文件通常是一个ZIP/JAR文件,里面包含一个”classes.dex”。虚拟机将在目录/data/dalvik-cache下生成对应的文件名字并打开它,如果系统权限允许的话会首先创建或更新它。不要传目录/data/dalvik-cache下的文件名给它,因为这个文件被认为处于初始状态(DEX被优化之前)。

参数

File            引用实际DEX文件的File对象

异常

IOException  发生I/O异常,例如文件不存在或者没有权限访问。

 

public DexFile (String fileName)

打开指定文件名的DEX文件。指定的文件通常是一个ZIP/JAR文件,里面包含一个”classes.dex”。虚拟机将在目录/data/dalvik-cache下生成对应的文件名字并打开它,如果系统权限允许的话会首先创建或更新它。不要传目录/data/dalvik-cache下的文件名给它,因为这个文件被认为处于初始状态(DEX被优化之前)。

参数

fileName           DEX文件名。

异常

IOException     发生I/O异常,例如文件不存在或者没有权限访问。

        

公共方法

public void close ()

关闭DEX文件。

有可能无法释放任何资源。如果来自DEX文件的类还存活着的话,DEX文件不能被取消映射。

异常

IOException     在关闭文件的过程中可能发生I/O异常,一般不会发生。

        

public Enumeration<String> entries ()

枚举DEX文件里面的类名。

返回值

DEX文件所包含类名的枚举,类名的类型是一般内部格式(像java/lang/String)。

        

public String getName ()

获取(已打开)DEX文件名。

返回值

文件名

 

public static boolean isDexOptNeeded (String fileName)

如果虚拟机认为apk/jar文件已经过期返回true,并且应该再次通过”dexopt”传递。(译者注:dexoptapk优化工具)

参数

fileName  被检查apk/jar文件的绝对路径名。

返回值

如果应该调用dexopt处理文件返回true;否则false

异常

FileNotFoundException   文件不可读、不是一个文件或者文件不存在。

IOException     fileName不是有效的apk/jar文件,或者在解析文件时出现问题。

NullPointerException       fileName是空的。

StaleDexCacheError         优化过的DEX文件已过期且位于只读分区。

 

public Class loadClass (String name, ClassLoader loader)

装载一个类。返回成功装载的类,失败返回空。

如果在类装载器之外调用它,往往不会得到你想要的结果,这时请使用forName(String)

该方法不会在找不到类的时候抛出ClassNotFoundException异常,因为每次在我们看到的第一个DEX文件里找不到类就粗暴地抛出异常是不合理的。

参数

name        类名,应该是一个"java/lang/String"

loader       试图装载类的类装载器(大多数情况下就是该方法的调用者)

返回值

类名对应的对象,装载失败时返回空。

        

public static DexFile loadDex (String sourcePathName, String outputPathName, int flags)

打开一个DEX文件,并提供一个文件来保存优化过的DEX数据。如果优化过的格式已存在并且是最新的,就直接使用它。如果不是,虚拟机将试图重新创建一个。该方法主要用于应用希望在通常的应用安装机制之外下载和执行DEX文件。不能在应用里直接调用该方法,而应该通过一个类装载器例如dalvik.system.DexClassLoader.

参数

sourcePathName     包含”classes.dex”Jar或者APK文件。(将来可能会扩展支持"raw DEX")

outputPathName     保存优化过的DEX数据的文件。

flags        打开可选功能(目前什么也没定义)

返回值

一个新的,或者先前已经打开的DexFile

异常

IOException     无法打开输入或输出文件。

 

受保护方法

protected void finalize ()

类结束时调用。确保DEX文件被关闭。

异常

IOException  关闭文件时发生I/O异常,一般不会发生。

 

补充

         文章精选

                   Dalvik 分析 - Class加载篇

                   启用另一个程序某些方法

                   Android类动态加载技术

 

Previous article: Next article: