Android虚拟机Dalvik Android的相关文件类型

2024-06-01 09:18

本文主要是介绍Android虚拟机Dalvik Android的相关文件类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android虚拟机Dalvik
Dalvik冲击
随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举。不过,其中的一个话题在Java 社区是一石激起千层浪,这就是Android 平台的基础——Dalvik 虚拟机。

Dalvik和标准Java虚拟机(JVM)首要差别

Dalvik 基于寄存器,而JVM 基于栈。,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。


Dalvik和Java运行环境的区别

Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭.

Dalvik形势
Dalvik 的诞生也导致人们开始忧虑Java 平台的第一次大规模的分道扬镳或许已经是进行时了——有人已经把Davlik 和微软的JVM 以及Sun 对微软的诉讼联系起来,等着看Google 身上是否也会发生类似事情;另外一些人则指出,Google 并没有宣称Dalvik 是一个Java 实现,而微软却是这样做的。Sun 也对可能带来的阵营分裂表达了忧虑情绪,并提出和Google 合作来保证Dalvik 和JVM 之间的兼容性——Google 对此的解释是,Dalvik 是对解决目前JavaME 平台上分裂的一次尝试,也是为了提供一个拥有较少限制许可证的平台。甚至还有人怀疑这是否是Sun 和Google 两大阵营对Java 之未来的一次大规模较量。

Android的相关文件类型


Java文件-----应用程序源文件
android 本身相当一部分都是用java 编写而成(基本上架构图里头蓝色的部份都是用Java 开发的),android 的应用必须使用java 来开发。

Class文件------Java编译后的目标文件
不像J2se,java 编译成class 就可以直接运行,android 平台上class 文件不能直接在android 上运行。由于Google使用了自己的Dalvik 来运行应用,所以这里的class 也肯定不能在AndroidDalvik 的java 环境中运行,android的class 文件实际上只是编译过程中的中间目标文件,需要链接成dex 文件后才能在dalvik 上运行。

 
Dex文件-----Android平台上的可执行文件
Android 虚拟机Dalvik 支持的字节码文件格式Google 在新发布的Android 平台上使用了自己的Dalvik 虚拟机 来定义,这种虚拟机执行的并非Java 字节码,而是另一种字节码:dex 格式的字节码。在编译Java 代码之后, 通过Android 平台上的工具可以将Java 字节码转换成Dex 字节码。虽然Google 称Dalvik 是为了移动设备定
做的,但是业界很多人认为这是为了规避向sun 申请Javalicense。这个DalvikVM 针对手机程式/CPU 做过最 佳化,可以同时执行许多VM 而不会占用太多Resource。

Apk文件-------Android上的安装文件
Apk 是Android 安装包的扩展名,一个Android 安装包包含了与某个Android 应用程序相关的所有文件。apk文件将AndroidManifest.xml 文件、应用程序代码(.dex 文件)、资源文件和其他文件打成一个压缩包。一个工程只能打进一个.apk 文件。

Android 的应用程序结构分析:HelloActivity


本例以一个简单的HelloActivity 程序为例,简单介绍Android 应用程序的源代码结构。事实上,Android 应用程序虽然不是很复杂,但是通常涉及了JAVA 程序,XML 文件,Makefile多方面的内容。HelloActivity 虽然简单,但是麻雀虽小,五脏俱全,是学习Android 应用程序的最好示例。

第一部分:HelloActivity 的源代码
HelloActivity 工程的源代码在Android 目录的development/samples/HelloActivity/中,代码的结构如下所示:
其中tests 是一个独立的项目,可以暂时不考虑。其他部分看作一个Android 的一应用程序的工程。这个工程主要的组成部分如下所示:
AndroidManifest.xml:工程的描述文件,在运行时有用处
Android.mk:整个工程的Makefile

HelloActivity 的源代码development/samples/HelloActivity/
|-- Android.mk
|-- AndroidManifest.xml
|—res
| |—layout
| | -- hello_activity.xml
| -- values
| -- strings.xml
|—src
| -- com
| -- example
| -- android
| -- helloactivity
|-- HelloActivity.java
    -- tests
       |-- Android.mk
       |-- AndroidManifest.xml
        -- src
           -- com
              -- android
                  -- helloactivity
                     -- HelloActivityTest.javares:放置资源文件的目录 src/com/example/android/helloactivity/HelloActivity.java:这是JAVA 类文件,这个文件的路径表示在Andorid 的JAVA 包的结构中的位置,这个包的使用方式为 com.example.android.helloactivity。 第二部分: 编译的中间结果 这个HelloActivity 工程经过编译后将生成 out/target/common/obj/APPS/He lloActivity_intermediates/ 目录,这个目录中的内容都是HelloActivity 工程相关的,更具体地说都与development/samples/HelloActivity/ 中的Android.mk 文件相关。 out/target/common/obj/APPS/He lloActivity_intermediates/|-- classes.dex (字节码)|-- classes.jar (JAR 文件)|-- public_resources.xml (根据resources 结构生成的xml)`-- src|-- R.stamp`-- com`-- example`-- android`-- helloactivity`-- R.java (resources 生成的文件) classes.dex 是一个最重要的文件,它是给Android 的JAVA 虚拟机Dalvik 运行的字节码文件。 classes.jar 是一个JAR 文件,JAR 的含义为Java ARchive,也就是Java 归档,是一种与平台无关的文件格式,可将多个文件合成一个文件。解压缩之后的目录结构:(JAVA 标准编译得到的类)各个以class 为扩展名的文件,事实上是JAVA 程序经过编译后的各个类的字节码。 第三部分: 目标apk 文件目标apk 文件是Android 的JAVA 虚拟机Dalvik 安装和运行的文件,事实上这个apk 文件将由编译的中间结果和原始文件生成。apk 文件的本质是一个zip 包。这个APK 包解压缩后的目录结构如下所示: out/target/product/generic/obj/APPS/HelloActivity_intermediates/package.apk_FILES/ |-- AndroidManifest.xml |-- META-INF | |-- CERT.RSA | |-- CERT.SF | `-- MANIFEST.MF |-- classes.dex |—res | `—layout | `-- hello_activity.xml `-- resources.arsc值得注意的是,这里的xml 文件经过了处理,和原始的文件不太一样,不能按照文本文件的方式阅读。第四部分: 源代码的各个文件 Android.mk 是整个工程的“Makefile”,其内容如下所示: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := samples # Only compile source java files in this apk. LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := HelloActivity LOCAL_SDK_VERSION := current include $(BUILD_PACKAGE) # Use the following include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH)) 这个文件在各个Android 的工程中都是类似的,其中LOCAL_PACKAGE_NAME 表示了这个包的名字。LOCAL_MODULE_TAGS 表示了模块的标,在这里使用的是 samples,正式的应用程序(packages 目录中的应用)中多使用eng development。 AndroidManifest.xml 是这个HelloActivity 工程的描述文件,其内容如下所示: 其中package 用于说明这个包的名称,android:labeapplication 中的内容是表示这个应用程序在界面上显示的标题,activity 中的android:name 表示这个Android 的活动的名称。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" http://schemas.android.com/apk/res/android " package="com.example.android.helloactivity" > <application android:label="He llo, Activity!"> <activity android:name="He lloActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest> package android.hello; import android.app.Activity; import android.os.Bundle; public class helloword extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }文件src/com/example/android/helloactivity/HelloActivity.java 是程序主要文件,由JAVA 语言写成com.example.android.helloactivity 表示的是这个包的名称, 在文件的头部引入了两个包android.app.Activity 是一个Android 活动( Activity)包,每一个Android 活动都需要继承Activity 类。 包android.os.Bundle 用于映射字符串的值。 onCreate()是一个重载的函数,在这个函数中实现应用程序创建的所执行的过程。其中setContentView()设置当前的视图(View)。 设置的方法是使用一个文件,这个文件因此决定了视图中包含的内容。这里使用的是 R.layout.hello_activity,表示从res/layout/目录中使用hello_activity.xml 文件。 res/layout/hello_activity.xml 文件的内容如下所示: 其中定义了一个可编辑的文本( EditText),下面的各项其实是它的各种属性, android:text 表示这个文本的 内容,string/hello_activity_text_text 表示找到相应的文件, 也就是res/value/string.xml 文件中的 hello_activity_text_text 文本。 res/value/string.xml 的内容如下所示: hello_activity_text_text 文本被res/layout/hello_activity.xml 文件引用,正是应用程序运行时在 屏幕显示的文本。 package com.example.android.helloactivity; import android.app.Activity; import android.os.Bundle; public class HelloActivity extends Activity { public HelloActivity() { }@ Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hello_activity); } } <?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android=" http://schemas.android.com/apk/res/android " android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textSize="18sp" android:autoText="true" android:capitalize="sentences" android:text="@string/hello_activity_text_text" /> <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello_activity_text_text" >He llo, World!</string> </resources> AndroidADB工具使用 adb(Android Debug Bridge)是Android 提供的一个通用调试工具,借助这个工具,我妈可以管理设备或手机模 拟器的状态。 adb功能操作: 快速更新设备或手机模拟器中的代码,如应用或Android 系统升级 在设备上运行shell 命令 管理设备或手机模拟器上预定端口 在设备或手机模拟器上复制、粘贴文件 adb常用操作: 安装应用到模拟器 Android 没有提供一个卸载应用的命令,只能手动删除: 进入设备或模拟器的Shell 通过以上命令,可以进入设备或模拟器的shell 环境中,在这个Linux Shell 中,你可以执行各种Linux 的命令, 另外如果只想执行一条shell 命令,可以采用以下方式: 如: 会打印出内核的调试信息 发布端口 可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如: adb install app.apk adb shell cd data/app rm app.apk adb shell adb shell [command] adb shell dmesg adb forward tcp:5555 tcp:8000 -----------------------------------Android 编程基础 11 复制文件 可向一个设备或从一个设备中复制文件 复制一个文件或目录到设备或模拟器上: 如: 从设备或模拟器上复制一个文件或目录 如: 搜索/等待模拟器、设备实例 取得当前运行的模拟器、设备的实例列表及每个实例的状态| 等待正在运行的设备 查看Bug 报告 记录无线通讯日志 无线通讯记录日志非常多,在运行时没必要记录,可以通过命令设置记录 获取设备ID 和序列号 访问数据库SQLite3 adb push adb push test.txt /tmp/test.txt adb pull adb pull /android/lib/libwebcore.os adb devices adb wait-for-device adb bugreport adb shell logcat -b radio adb get-product adb get-serialno adb shell

这篇关于Android虚拟机Dalvik Android的相关文件类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020593

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组