当前位置:文档之家› Unity3d发布apk文件并在Android虚拟机中运行的操作流程

Unity3d发布apk文件并在Android虚拟机中运行的操作流程

Unity3d发布apk文件并在Android虚拟机中运行的操作流程
Unity3d发布apk文件并在Android虚拟机中运行的操作流程

Unity3d发布apk文件并在Android虚拟机中运

行的操作流程

2014-05-07 21:31:https://www.doczj.com/doc/dd15332868.html,-疯人愿-点击数:14

总的流程分为以下6个步骤:

1、安装java_jdk

2、配置java环境变量

3、更新android的sdk

4、从Unity3d中发布出apk文件

5、创建android虚拟机并运行

6、将apk文件安装到android虚拟机中

(为方便新手,在下面对每个步骤的具体操作及可能遇到的问题详细提一下)

1、安装java_jdk

官网(https://www.doczj.com/doc/dd15332868.html,),免费,我安装的文件的名字是jdk-7u10-windows-i586.exe,版本有新旧,你下载到的版本号可能与我不同,不碍事;

2、配置java环境变量

右键我的电脑→属性→高级系统设置→高级→环境变量,点击下面的系统变量中的新建按钮

输入变量名JAVA_HOME

输入变量值是上一步中java_jdk的安装路径,我的是C:/Program Files

(x86)/Java/jdk1.7.0_10

点击确定;

再次新建一个变量,变量名为CLASSPATH,变量值如下:

.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/bin

(别落下最前面的那个点)这里用的是相对路径,所以你可以复制我的,点击确定;找到一个已有的系统变量Path,编辑它的值,别改变原有的内容,在末尾加上

;C:/Program Files (x86)/Java/jdk1.7.0_10/bin

(注意这是随着你的java_jdk来的,和我写的内容以一定一样)

至此,java的环境变量配置结束;

3、更新android的sdk

运行android的sdk文件夹中的SDK Manager.exe,按需更新你所要的android版本;

4、从Unity3d中发布出apk文件

Build之前,在Player Settings中进行必要的设置,以下几个是必须的:

①Bundle Identifier*中的https://www.doczj.com/doc/dd15332868.html,pany.ProductName中的Company必须改成别的名字

②Install Location设置为Automatic,否则在android虚拟机中会运行失败,提示“Unfortunately,*** has stopped.”如下图

③Minimum API level中的android版本一定要低于或等于你要创建的android虚拟机中的android版本

然后Build就可以了,第一次Build的话,会提示你选择android的sdk的路径,注意选到sdk那级(我的是“E:/Tools/Android/adt-bundle-windows-x86/sdk”);

5、创建android虚拟机并运行

运行android的sdk文件夹中的AVD Manager.exe,点击New...按钮来创建虚拟机,各种选项填好,比较简单,有一点要注意,一定要打上Emulation Options中的Use Host GPU 的勾,否则往虚拟机中安装apk文件时会报错,提示“failure

install_failed_container_error”;

创建好虚拟机后,一定要在安装apk文件之前把虚拟机运行起来;

6、将apk文件安装到android虚拟机中

将发布好的apk文件移至android的sdk路径中的platform-tools文件夹中,然后打开cmd控制台,先进入到android的sdk路径中的platform-tools路径中,命令是“cd +具体路径”,我的是“cd E:/Tools/Android/adt-bundle-windows-x86/sdk/platform-tools”,然后回车;

进入后,输入adb install +apk文件名,回车等一会就好了,如果安装成功,会提示success,如下图

然后,在虚拟机中找到自己的apk,玩去吧。(下面附上我自己的)

android虚拟机emulator应用安装--使用adb install安装步骤和注意事项

2014-01-15 19:36 175人阅读评论(0) 收藏举报

1、下载安装android SDK,可通过浏览器或者相关手机软件下载软件下载需要安装的apk安装文件,把apk文件放到android-sdk-windows\platform-tools下

2、可通过adb相关的命令来启动或者在Eclipse下启动虚拟机,或者通过USB与真机连接

3、使用cmd进入android-sdk-windows\platform-tools目录

4、输入 adb install xxx.apk 如果有开启多个虚拟机或者连接了真机,可使用adb devices显示当前android的机器和abd -s emulator

555XX install xxx.apk进行安装

5、在CMD提示SUCEESS后,可在android虚拟机可找到安装成功的应用

我在安装的时候就遇过以中文名称的apk,安装时报错了Segmentation fault, pm install /data,把apk的文件名改为英文名称,就成正常安装了

把apk安装文件放到进入android-sdk-windows\platform-tools目录,能防止在CMD上安装显示成功,但在虚拟器上未能看到已经安装

附:

下面为网上收集的相关资料:

apk安装常见出错解决方法:

1. 无法识别设备

adb kill-server

然后再adb start-server

2. Segmentation fault, pm install /data…

直接使用adb向模拟器中安装app时报这个错误。

原因很简单,使用豌豆荚下载下来的app很多是用中文命名的,改成英文名重新adb install. 至于为什么,我想设计adb的工程师们根本没有考虑中文支持吧。

3.Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

这个问题出现的背景要说明一下:下载了某app,往里面加了点东西,然后重新打包使用adb install安装。

这是由于Android应用程序的自签名机制导致的。

Android 系统不会安装运行任何一款未经数字签名的apk程序,无论是在模拟器上还是在实际的物理设备上。Android的开发工具(ADT插件和Ant)都可以协助开发者给apk程序签名,它们都有两种模式:调试模式(debug mode)和发布模式(release mode)。

如果要正式发布一个Android App,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。

签名的作用

1. 发送者的身份认证。由于开发商可能通过使用相同的 Package Name 来混淆替换已经安装的程序,以此保证签名不同的包不被替换

2. 保证信息传输的完整性。签名对于包中的每个文件进行处理,以此确保包中内容不被替换。

要解决这个错误,需要点专用工具,看雪上比较多,我就不再此贴出

来了。

4.Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

在“卸载”app时,没有通过应用程序管理器卸载,而是直接通过adb

删除了/data/app中的相应包。这中方式“卸载”是不彻底的,因为程序安装后还会在其他地方,比如/data/data中建立相关的目录和文件。

在设置-应用程序-管理应用程序里,找到要卸载的app,进行卸载。卸载后再次安装,就不会再出现这个错误了。

5. Failure [INSTALL_FAILED_DEXOPT]

在android4.0源码里面编译出来apk后,用adb install 安装时,报错[INSTALL_FAILED_DEXOPT]。

z:\ics-android\ics-

src\out\target\product\generic\system\app>adb install NativeTimer.apk

28 KB/s (10166 bytes in 0.344s)

pkg: /data/local/tmp/NativeTimer.apk

Failure [INSTALL_FAILED_DEXOPT]

原来在system\app下面的apk是经过优化的,而dex文件不会打包到apk中,dex文件会被优化后,生成odex文件。

z:\ics-android\ics-

src\out\target\product\generic\system\app\NativeTimer.apk

z:\ics-android\ics-

src\out\target\product\generic\system\app\NativeTimer.odex

这样安装apk时,就会缺少dex文件,导致报错

[INSTALL_FAILED_DEXOPT]。

解决办法:

找到未优化过的apk,即

z:\ics-android\ics-

src\out\target\product\generic\obj\APPS\NativeTimer_intermedi ates>adb install package.apk.unaligned

70 KB/s (138806 bytes in 1.912s)

pkg: /data/local/tmp/package.apk.unaligned SuccessFailure

6.adb push out of memory

最近做个东西,要修/system/etc/下的hosts文件,目的是通过域名访问内网的服务器,进行手机与内网的测试,这里要说的是如果是连接外网,并不需要如此做法,正因为我们要做测试,不可能用外网,是测成功了再连外网

做法是先在电脑上写好hosts文件内容,如下:

127.0.0.1 localhost

192.168.0.100 https://www.doczj.com/doc/dd15332868.html,

保存好文件后,通过如下命令进行上传(要有Root权限,即你曾刷过ROM):

adb remount

adb push d:\hosts /system/etc

之后进入shell模式下查看是否上传成功

adb shell

ping https://www.doczj.com/doc/dd15332868.html,

如果出现的IP地址是 192.168.0.100表示上传hosts文件成功了。

说到这里,大家可能很想骂我,与题目不符,现在就是出现问题的时候了,

这个文件是上传了,当我每次修改代码再装到手机上运行时,就连不上https://www.doczj.com/doc/dd15332868.html,了,搞了半天,原来上传的hosts文件其实并没有持久化到手机系统上的,只是内容载到内存中,装新应用或者重启机子后,就没了。好!那我再次上传hosts文件,就报出:

out of memory 这样的错了,必须要重启手机,才能再次push,这真是太麻烦了,改一次代码就要重启,这算什么嘛

在网上找了几天了,解决办法都是针对模拟器的,真机上出的还是没找到,今天看了论坛上有人要删除系统下的文件,我就看看了,有收获,

解决办法是:

在recovery状态下连接手机,并进入advance -mount/system,在PC端CMD中输入以下命令:

adb remount

adb push d:\hosts /system/etc

之后重新启动,

启动之后进入shell

adb shell

cd /system/etc

cat hosts

OK,成功打出了修改过的内容,而不会再丢失了,是真得改到手机的Linux系统上了。

看了论坛的内容也贴出来,是讲删除系统文件

在recovery状态下连接手机,并进入advance -mount/system,在PC端CMD中输入以下命令:

adb shell

cd /system/app

ls

查找到你要删除的文件(如Talk.apk)将其删除之:

rm Talk.apk(如果还有同名的只是后缀不同,也可以用Talk.*)重启手机就OK了

7. 系统文件删除无权限

mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system chmod 777/system/app

今天下午,我在打开whatsapp的时候,破玩意儿又提示

我有新版本要不要更新,于是我选择了Yes。经过缓慢的

安装之后,忽然提示我installed unsuccessful。我一下

脑袋就大了,我是安装的没有修改的官方包,更新又是自

动下载的,为什么还会出现这种情况?

于是我怀疑可能是官方更改了证书,所以需要卸载之后重新安装。于

是我打开Drawer准备重新启动whatsapp。没想到虽然whatsapp的

图标出现在drawer里面,但是启动的时候却提示我没有安装这个app!我靠,这还了得,于是我将whatsapp卸载了,然后试图重新安装新版。还是提示我不能安装!

于是我使用adb再次尝试安装,提示我[INSTALL_FAILED_DEXOPT],Google之后发现dexopt根本就不是一个单词,应该是dex和

optimize的合成缩写。那么有可能是apk文件包里面的dex文件损坏,于是我把它反编译了出来,尝试重新编译。但是不知道这个东西是用

什么编译的,smali根本就不能重新编译回去……只能作罢。

所以假设问题还是出现在手机端。Google了一下,发现这个问题应该

是出现在生成dex文件时候发生的错误,但是能搜索到的结果有许多

是说由于G1机身空间太小导致的,显然同样的问题不可能出现在刚

刚做完app2sd的milestone上面。但是我搜索到了一个如果强制完全

卸载app的文章,里面介绍了安装app之后,相关文件分布的路径。所以我的思路就很清晰了,首先完全卸载,再行安装。

经过试验,发现果然可行!那么提炼一下,可以得出这类问题的通用解决思路。

假设该app名为ketech,安装包名为ketech.apk。

1. 查看/data/app里面是否有名称包含ketech的apk或zip包,有

可能为类似com.android.ketech.apk或com.android.ketech.zip

的形式,有则删掉。

2. 查看/data/app-priviate里面是否有名称包含ketech的apk,名

称形式同上,有则删掉。(做了app2sd的朋友可能还需要查看一下app2sd文件夹里面是否含有此apk包)

3. 查看/data/data下面是否有名称包含ketech的文件夹,名称形式

类似于com.android.ketech,有则删掉。

4. 查看/data/system下面的package.xml文件,将包含ketech的

项目删掉。

5. Wipe Dalvik缓存。(方式多样,有些openrecovery自带,就不

进行详细解释了)

6. 重新安装即可。

替代方案

单改单个模块下的Android.mk

加入

LOCAL_DEX_PREOPT := false

mm后

在out目录下找到相应apk

直接push到/system/app

当然之前要删除要替换的的*.apk *.odex

android系统开机启动流程分析

一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init. .rc脚本文件建立几个基本 服务(servicemanager zygote),然后担当property service 的功能 打开.rc文件,解析文件内容。【system/core/init/init.c】将service信息放置到service.list中【system/core/init/init_parser.c】。 建立service进程。【service_start(…) execve(…)】 在init.c中,完成以下工作 1、初始化log系统【解析/init.rc和init.%hardware%.rc文件,在两个 文件解析步骤2时执行“early-init”行动】 2、初始化设备【在/dev下创建所有设备节点,下载firmwares】 3、初始化属性服务器【在两个文件解析步骤2时执行“init”行动】

什么是APK文件,如何在Android手机安装APK文件

什么是APK文件,如何在Android手机安装APK文件 虽然Android手机用户可以在电子市场(Android Market)找到几乎所有你需要的应用程序下载并安装。不过你还是有时候会在论坛和Android应用程序下载网站接触到一种后缀名为APK 的安装文件,APK是Android Package的英文缩写,和诺基亚S60系统的sis文件类似,APK 文件是Android平台移动设备的专用安装文件格式。APK文件本质上是JAR(Java ARchive)文件的一个变种。 我们之所以要使用到APK文件在Android手机上安装应用程序有以下几种可能: Android开发者想要把自己的应用程序上传到Android电子市场必须交纳25美元的注册费并且进行开通Google Checkout以及绑定信用卡等非常复杂的操作,对国内开发者非常不友好,所以部分开发者只以APK文件方式分发自己的Android程序。 中国大陆Android用户不支持在电子市场购买付费程序,但是很多国外的用户自己购买Android付费程序后通过技术手段导出该程序的APK安装文件,并且在论坛或者相关网站分享给其他用户下载,让我们也可以在Android手机上体验功能更强大的付费应用程序。 Android智能手机和PC一样有时候也需要重新安装系统(刷机),那么在重装系统之前可以通过软件把自己安装的所有程序备份为APK文件,等到系统安装完成后再安装这些APK文件恢复之前的应用程序。采用这种方式既方便又可以节省网络流量费用。 通过电子市场安装APK文件到Android手机 使用下面的办法就可以安装下载的APK文件到手机 1.打开Android手机设置菜单,进入应用程序设置,勾选“未知来源”选项,然后进入开发设置,再勾选“USB调试”选项 2.拷贝APK安装文件到Android手机内存卡,不一定是内存卡根目录 3.从Android电子市场下载一款APK安装软件,电子市场有很多这种类型的软件,比如这款Apk Manager。 4.打开Apk Manager软件(其他APK安装软件操作类似),程序会自动扫描并显示手机内存卡里的APK文件。 5.点击APK文件就可以安装程序。 如果你觉得每次使用USB连接线APK文件拷贝到内存卡安装太麻烦,或者是你碰巧身边没有USB连接线,你还可以把APK文件作为附件发送到Gmail邮箱,然后在手机打开Gmail 程序并点击附件下载,下载完成后会就可以通过tAttachApkInstaller(电子市场有下载,需要提前安装)程序安装。

Android adb(调试桥)的应用及操作命令 有米分享

Android adb(调试桥)的应用及操作命令 试阅: ……Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期: ?radio —查看缓冲区的相关的信息. ?events —查看和事件相关的的缓冲区. ?main —查看主要的日志缓冲区 -b 选项使用方法: [adb] logcat [-b ] 下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息: adb logcat -b radio 查看stdout 和stderr 在默认状态下,Android系统有stdout 和 stderr (System.out 和System.err )输出到/dev/null ,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和优先级 I.来记录日志信息 通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用 setprop 命令远程输入日志 $ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start 系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加 /data/local.prop 可以使用模拟器/设备上的默认设置 Logcat命令列表 Option Description -b 加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers. -c 清楚屏幕上的日志.

Android 开机启动流程

Android的开机流程 1. 系统引导bootloader 1) 源码:bootable/bootloader/* 2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择 a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.i mg包含内核,基本的文件系统,用于工程模式的烧写 c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况) 2. 内核kernel 1) 源码:kernel/* 2) 说明:kernel由bootloader加载 3. 文件系统及应用init 1) 源码:system/core/init/* 2) 配置文件:system/rootdir/init.rc, 3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1)源码:frameworks/base/cmds/app_main.cpp等 2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process a)建立Java Runtime,建立虚拟机 b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序 c) 启动System Server 5. 系统服务system server 1)源码:frameworks/base/services/java/com/android/server/SystemServer.jav a 2) 说明:被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等) 6. 桌面launcher 1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现 2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher 7. 解锁 1) 源码: frameworks/policies/base/phone/com/android/internal/policy/impl/*lock* 2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置

Android源码下载方法详解

Android: Android源码下载方法详解 分类:Android平台 安卓源码下载地址:https://www.doczj.com/doc/dd15332868.html,/source/downloading.html 相信很多下载过内核的人都对这个很熟悉 git clone git://https://www.doczj.com/doc/dd15332868.html,/kernel/common.git kernel 但是这是在以前,现在如果这么执行的话,会显示如下内容 Initialized empty Git repository in /home/star/working/kernel/.git/ https://www.doczj.com/doc/dd15332868.html,[0: 149.20.4.77]: errno=Connection refused fatal: unable to connect a socket (Connection refused) 通过浏览器输入https://www.doczj.com/doc/dd15332868.html,/,发现该网站已经被重定向为 https://www.doczj.com/doc/dd15332868.html,/source/downloading.html 可以在该页面的最后发现内核的下载方法。 下面我们介绍一下Android源码下载的步骤。 工作环境: 操作系统:Ubuntu 10.04 或Ubuntu10.10 git程序:1.7.0.4 或1.7.1 转载请注明出处:https://www.doczj.com/doc/dd15332868.html,/pku_android 方法一: 1.1 初始化安装环境 参考网页https://www.doczj.com/doc/dd15332868.html,/source/initializing.html 主要要做的就是安装jdk和安装一些软件包 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \ libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \ libxml2-utils 如果已经安装了,就不许要这步了 1.2 无论下载内核和源码,都需要进行如下操作 参考网页https://www.doczj.com/doc/dd15332868.html,/source/downloading.html $ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://https://www.doczj.com/doc/dd15332868.html,/dl/googlesource/git-repo/repo > ~/bin/repo 如果出现: repo init error: could not verify the tag 'v1.12.7',

基于MT6752的 android 系统启动流程分析报告

基于MT6752的Android系统启动流程分析报告 1、Bootloader引导 (2) 2、Linux内核启动 (23) 3、Android系统启动 (23) 报告人: 日期:2016.09.03

对于Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。但根据芯片架构和平台的不同,在启动的Bootloader阶段会有所差异。 本文以MTK的MT6752平台为例,分析一下基于该平台的Android系统启动流程。 1、Bootloader引导 1.1、Bootloader基本介绍 BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备,目的就是引导linux操作系统及Android框架(framework)。 它的主要功能包括设置处理器和内存的频率、调试信息端口、可引导的存储设备等等。在可执行环境创建好之后,接下来把software装载到内存并执行。除了装载software,一个外部工具也能和bootloader握手(handshake),可指示设备进入不同的操作模式,比如USB下载模式和META模式。就算没有外部工具的握手,通过外部任何组合或是客户自定义按键,bootloader也能够进入这些模式。 由于不同处理器芯片厂商对arm core的封装差异比较大,所以不同的arm处理器,对于上电引导都是由特定处理器芯片厂商自己开发的程序,这个上电引导程序通常比较简单,会初始化硬件,提供下载模式等,然后才会加载通常的bootloader。 下面是几个arm平台的bootloader方案: marvell(pxa935) : bootROM + OBM + BLOB informax(im9815) : bootROM + barbox + U-boot mediatek(mt6517) : bootROM + pre-loader + U-boot broadcom(bcm2157) : bootROM + boot1/boot2 + U-boot 而对MT6752平台,MTK对bootloader引导方案又进行了调整,它将bootloader分为以下两个部分: (1) 第1部分bootloader,是MTK内部(in-house)的pre-loader,这部分依赖平台。 (2) 第2部分bootloader,是LK(little kernel的缩写,作用同常见的u-boot差不多),这部分依赖操作系统,负责引导linux操作系统和Android框架。 1.2、bootloader的工作流程 1.2.1 bootloader正常的启动流程 先来看启动流程图:

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

android课程介绍

1.课程基本信息 课程编号:M21F58D10 课程名称:Android应用与开发 开设学期:第3学期 总学时:60 总学分:4 课程类别:岗位能力课程课程性质:必修课 适用专业:软件技术(移动应用开发) 责任单位:计算机与软件学院 2.课程定位 《Android应用与开发》课程是软件技术(移动应用开发方向)专业的岗位能力课程,课程的开设依据是软件技术专业人才培养目标和相关职业岗位(群)的能力要求,对本专业所面向的手机软件开发与测试、软件开发与项目管理等岗位所需要的知识、技能和素质目标的达成起支撑作用。 在课程设置上,前导课程有《Java程序设计》(M21F1611),《数据结构》(M21F232),后续课程有《移动互联网开发综合实训》(M21J57B10)、《毕业实习》(M21J991)。 3.课程设计思路 首先依据专业人才培养方案中关于人才培养目标的阐述,明确课程目标;其次,结合职业教育课程观、教学观、能力观,基于软件工程的开发过程,以项目化教学来组织课程内容,在课程内容的选择与排序中,以软件项目研发的不同阶段、典型任务为载体,将课程内容划分为互相联系的学习情景;第三,通过对各学习情景中学习目标、主要内容、授课方式、师生要求等各项内容的描述,来规范课程所要求的内容;第四,通过对课程内容的选取和组合,以一个完整的项目为载体,完成课程的实施;最后,通过对项目实施过程中各个环节的考察和评价,来完成对课程的评鉴与考核。 本课程在设计上本着懂方法,重应用的总体思路,突出体现职业教育的技能型、应用性特色,着重培养学生的实践应用技能,力求达到理论方法够用,技术技能过硬的目的。 4.课程建设基本理念 本课程按照理论实践一体、课内外互补、课堂教学与培优工程相结合的课程设计指导思想,以任务或项目为载体组织教学内容,突出学生的主体地位,实现“教、学、做”的有机融合;通过班级讲授、团队学习、个体辅导、展示交流、技能大赛等手段,实现从模仿到应用到创新的高职学生递进式培养。 本课程强调对学生职业岗位能力的培养和职业素养的养成,针对不同环节,采用特定的教学方法,有意识、有步骤地将职业能力的训练和职业素养的形成融入到实际的教学过程中。

在Eclipse上调试Android应用程序

在Eclipse上调试Android应用程序 以前一直用VC开发,VC开发工具调试程序非常简单,按F7源码编译通过后,按F5就开始调试了。为了开发Android程序,使用Eclipse开发环境,刚接触Eclipse不久,对Eclipse 环境不够熟悉,在这之前开发Android程序都是通过Trace定位问题的,后来得知Eclipse也可以进行单步调试,经过动手试验,发现调试过程类似VC开发环境,下面是调试步骤: 1. 首先启动Eclipse,启动Android模拟器 2. 打开DDMS界面,选择要调试的设备,并指定要调试的进程,例如: 3.设置好断点,打开调试界面,按F11开始调试,可以F6进行单步调试。 ******************************** DDMS 的全称是Dalvik Debug Monitor Service,是Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。 在集成开发环境中,有DDMS控制台窗口。如,MyEclipse中,有个叫DDMS的Console。 1.如何启动DDMS 这个工具存放在SDK-tools路径下,启动方法: 1) 直接双击ddms.bat运行; 2) 在Eclipse调试程序的过程中启动DDMS,在Eclipse如下: Window-Open Perspective-DDMS,点击启动就可以了 DDMS对Emulator和外接测试机同等效用,如果系统检测到它们(VM)同时运行,那么DDMS 将会默认指向Emulator,以上两种启动后的操作有些不一样,建议分别尝试下; (WGY-Dalvik:虚拟机;Monitor:监听器)

Android开机启动流程样本

Android的开机流程 1. 系统引导bootloader 1) 源码: bootable/bootloader/* 2) 说明: 加电后, CPU将先执行bootloader程序, 此处有三种选择 a) 开机按Camera+Power启动到fastboot, 即命令或SD卡烧写模式, 不加载内核及文件系统, 此处能够进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式, 加载recovery.img, recovery.img包含内核, 基本的文件系统, 用于工程模式的烧写 c) 开机按Power, 正常启动系统, 加载boot.img, boot.img包含内核, 基本文件系统, 用于正常启动手机( 以下只分析正常启动的情况) 2. 内核kernel 1) 源码: kernel/* 2) 说明: kernel由bootloader加载 3. 文件系统及应用init 1) 源码: system/core/init/* 2) 配置文件: system/rootdir/init.rc, 3) 说明: init是一个由内核启动的用户级进程, 它按照init.rc中的设置执行: 启动服务( 这里的服务指linux底层服务, 如adbd提供adb支持, vold提供SD卡挂载等) , 执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1) 源码: frameworks/base/cmds/app_main.cpp等 2) 说明: zygote是一个在init.rc中被指定启动的服务, 该服务对应的命令是/system/bin/app_process

Android平台介绍及使用指导

Android平台介绍及使用指导 二○一○年二月 版本 1.0

目录 Android平台介绍 ................................................................................... - 4 -基本名词...................................................................................................................... - 5 - 操作方法介绍 .......................................................................................... - 6 - 手机按键介绍.............................................................................................................. - 6 - 快捷键介绍.................................................................................................................. - 6 - 信息功能介绍.............................................................................................................. - 7 - 联系人功能介绍........................................................................................................ - 11 - 通话记录功能介绍.................................................................................................... - 14 - 文本粘贴/复制功能介绍.......................................................................................... - 14 - Push Email(Moxier)功能介绍............................................................................ - 15 - 电子邮件功能介绍.................................................................................................... - 16 - 桌面功能介绍............................................................................................................ - 19 - 蓝牙功能介绍............................................................................................................ - 23 - Wifi功能介绍........................................................................................................... - 23 - 飞行模式功能介绍.................................................................................................... - 23 - CDMA数据链接介绍................................................................................................... - 24 - 黑屏解锁功能............................................................................................................ - 25 - 回复出厂设置............................................................................................................ - 26 - 应用程序设置............................................................................................................ - 26 - GPS设置..................................................................................................................... - 27 - 手机中英文语言切换................................................................................................ - 28 - 更换手机输入法........................................................................................................ - 29 - 数据线链接Android手机........................................................................................ - 29 - 手机测试模式进入方法............................................................................................ - 30 - 横屏显示介绍............................................................................................................ - 30 - 浏览器功能介绍........................................................................................................ - 31 - RSS功能介绍............................................................................................................ - 32 - Q/A- 34 -

Android的调试打印接口分析

Android的调试打印接口分析 Android输出Log可以通过使用Android.util中的Log类来实现。android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及Log.e() 。根据首字母对应VERBOSE、DEBUG、INFO、WARN、ERROR。例如,在执行下面的代码后,会输出Log到LogCat View 里: Log.v("tag", "message"); Java中原有的打印语句System.out.println()的打印也会被输出到LogCat,它的Tag标签是” System.out” 在Eclipse下会通过如下的窗口显示: 在机顶盒命令模式下,则需要执行logcat命令在串口输出打印(或者将打印输出到指定文件)。 1、使用android.util.log的优点 1)功能强大,使用方便 Logcat可以根据调试级别输出不同等级的信息(VERBOSE,DEBUG,INFO, WARN,ERROR),而且可以过滤输出指定tag的调试信息; 2)系统自动添加调试信息,定位问题快捷 程序异常退出、强制关闭、长时间无响应时,系统会自动生成log打印。包括系统基本信息(内存,CPU ,进程队列,虚拟内存,垃圾回收等)、时间信息和虚拟机信息(包括进程的,线程的跟踪信息)。 2、使用android.util.log的缺点 中间件其它模块的打印最后统一由rocme_porting_dprintf()实现,独独android的java输出使用了自己的底层实现(调用Linux的write( int fildes, const void* buf,size_t nbyte )),不够统一。 3、Android中Java打印在底层改由rocme_porting_dprintf()实现的优点 中间件打印最后统一由rocme_porting_dprintf()实现,这样只需修改porting就可以实现打印的开关、打印终端的控制(串口、控制台……)。 4、Android中Java打印改由rocme_porting_dprintf()实现的缺点 1)Android log原有的输出等级控制和输出过滤的功能将丧失,Android内部C和C++实现中用LOGV、LOGD、LOGI等分等级输出的打印将全部会输出,除非rocme_porting_dprintf()也实现分等级输出的功能; 2)Android在运行Java应用的时候,会将每个进程的标准输出sdtout等重定向到/dev/log/下的三个文件(main、radio、events)中进行缓存,执行logcat命令后再重定向到串口进行输出。若改用rocme_porting_dprintf(),则需要其实现将每个进程的标准输出sdtout重定向,

Android系统启动过程详解

Android系统启动过程详解 Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)

下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均有省略不完整,请参照源码。

一Init进程的启动 init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。 启动过程就是代码init.c中main函数执行过程:system\core\init\init. c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析 .rc文件是Android使用的初始化脚本文件(System/Core/Init/readm e.txt中有描述: four broad classes of statements which are Actions, Commands, Services, and Options.) 其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是linux 命令, 还有一些是android 添加的,如:class_start :启动服务,class_stop :关闭服务,等等。 其中Options是针对Service 的选项的。 系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。具体看一下启动脚本:\system\core\rootdir\init.rc 在解析rc脚本文件时,将相应的类型放入各自的List中: \system\core\init\Init_parser.c :init_parse_config_file( )存入到 action_queue、action_list、service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。 这其中包含了服务:adbd、servicemanager、vold、ril-daemon、deb uggerd、surfaceflinger、zygote、media…… 2 服务启动 文件解析完成之后将service放入到service_list中。 文件解析完成之后将service放入到service_list中。 \system\core\init\builtins.c

Android SystemBar启动流程分析

Android SystemBar启动流程分析 SystemBars的服务被start时,最终会调用该类的onNoService()方法。 @Override public void start() { if (DEBUG) Log.d(TAG, "start"); ServiceMonitor mServiceMonitor = new ServiceMonitor(TAG, DEBUG, mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this); mServiceMonitor.start(); // will call onNoService if no remote service is found } @Override public void onNoService() { if (DEBUG) Log.d(TAG, "onNoService"); createStatusBarFromConfig(); // fallback to using an in-process implementation } private void createStatusBarFromConfig() { … mStatusBar = (BaseStatusBar) cls.newInstance(); … mStatusBar.start(); } BaseStatusBar是一个抽象类,故调用其子类的PhoneStatusBar的start 函数。 @Override public void start() { … super.start(); … } 子类的start又调用了父类的start public void start() { … createAndAddWindows(); … }

androidAPK应用安装过程以及默认安装路径

应用安装过程以及默认安装路径 分类: 一:安装过程 是类似或的文件格式。通过将文件直接传到模拟器或手机中执行即可安装。 应用安装有如下四种方式 1. 系统应用安装――开机时完成,没有安装界面 2. 网络下载应用安装――通过应用完成,没有安装界面 3. 工具安装――没有安装界面。 4. 第三方应用安装――通过卡里的文件安装,有安装界面,由应用处理安装及卸载过程的界面。 应用安装的流程及路径 应用安装涉及到如下几个目录: 系统自带的应用程序,无法删除 用户程序安装的目录,有删除权限。

安装时把文件复制到此目录 存放应用程序的数据 将中的文件安装到目录下(文件是虚拟机的可执行文件,其大小约为原始文件大小的四分之一) 安装过程:复制安装包到目录下,解压并扫描安装包,把文件(字节码)保存到目录,并目录下创建对应的应用数据目录。 卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。 一、系统应用安装: 处理各种应用的安装,卸载,管理等工作,开机时由启动此服务 (源文件路径:\\\\\\\\) 服务启动的流程: 1. 首先扫描安装“\”目录下的包

1. (, | ); 2.第二步扫描安装“\”目录下的各个系统应用 (, ); 3.第三步扫描“\”目录,即用户安装的第三方应用 (, 0, ); 4.第四步扫描" \"目录,即安装保护的文件(目前没有遇到过此类的应用)。(,0, | ); 安装应用的过程 1(, , ) 遍历安装指定目录下的文件

2(, , , , ) 安装文件 3( , , , , , ) 通过解析安装包获取到安装包的信息结构4(, ); 实现文件复制的安装过程(源文件路径:\\\\) 二、从上下载应用:

AndroidL系统启动及加载流程分析

Android L系统启动及加载流程分析 1、概述 Android L的启动可以分为几个步骤:Linux内核启动、init进程启动、native系统服务及java系统服务启动、Home启动,主要过程如下图: 图1 整个启动流程跟4.4及之前的版本相差不多,只是有个别不同之处,本文我们主要分析Linux内核启动之后的过程。

2、启动过程分析 2.1 init进程启动 当系统内核加载完成之后,会启动init守护进程,它是内核启动的第一个用户级进程,是Android的一个进程,进程号为1,init进程启动后执行入口函数main(),主要操作为: 图2 AndroidL上将selinux的安全等级提高了,设为了enforcing模式,4.4上是permissive模式。 解析rc脚本文件,即init.rc脚本,该文件是Android初始化脚本,定义了一系列的动作和执行这些动作的时间阶段e aryl-init、init、early-boot、boot、post-fs等阶段。init进程main 函数中会根据这些阶段进行解析执行。AndroidL上为了流程更清晰,增加了charger(充电开机)、ffbm(工厂模式)、以及late-init阶段,实际上这些阶段是对其他阶段的组合执行,比如late-init:

2.2 ServiceManager的启动 servicemanager的启动就是init进程通过init.rc脚本启动的: 源码在frameworks/native/cmds/servicemanager/service_manager.c中,servicemanager是服务管理器,它本身也是一个服务(handle=0),通过binder调用,为native和Java系统服务提供注册和查询服务的,即某个服务启动后,需要将自己注册到servicemanager中,供其他服务或者应用查询使用。AndroidL上servicemanger中在处理注册和查询动作之前添加了selinux安全检测相关的处理。 2.3 SurfaceFinger、MediaServer进程启动 Android4.4以前,surfacefinger的启动根据属性system_init.startsurfaceflinger,决定是通过init.rc启动还是systemserver进程启动,之后的版本包括AndoridL都是通过init.rc启动的: 启动后会向servicemanager进程注册服务中,该服务启动时主要功能是初始化整个显

相关主题
文本预览
相关文档 最新文档