成都网站建设设计

将想法与焦点和您一起共享

android开发源码,Android源码

如何使用Android Studio开发/调试Android源码

开发调试环境: Ubuntu 14/display/IDEADEV/Inotify+Watches+Limit),具体内容如下图:四、解决源码中跳转错误问题 ①为当前工程设置正确的SDK和JDK②设置'Modules'的依赖先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了. 如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar) 点击上图中'2'指向的'+'并选择上图'3'指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:其它版本的代码在添加frameworks时可能会显示成:没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的. 如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可. 五、DEBUG源码 我们可以通过给刚导入的工程在'Modules'中添加'Android Framework'来让AS将它作为一个Android工程,从而方便我们调试代码.可以按照上图中'1'和'2'来添加Android Framework支持.在代码中加断点,然后选择'Run'-'Attach debugger to Android process'或者直接点击下图所示的图标 在弹出的选择进程(Choose Process)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可. 六、其它 代码中很多地方提示Call requires API Level x.... 出现这个问题是因为AS将我们的工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion. 我们只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。 也可以考虑使用build.gradle来解决该问题。

成都创新互联公司主打移动网站、成都网站建设、成都做网站、网站改版、网络推广、网站维护、国际域名空间、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。

Android源码开发记录-自定义系统服务和jar包生成

创建文件 IMyApiService

文件路径 frameworks/base/core/java/android/os/

定义了一个计算和的方法。

在frameworks/base/Android.mk

LOCAL_SRC_FILES最后加入

创建文件 MyApiService.java

文件路径 frameworks/base/core/java/com/android/server/

实现aidl的接口,计算参数和。

(1)Context添加服务名

文件路径 frameworks/base/core/java/android/content/Context.java

添加

(2)添加启动服务

文件路径 frameworks/base/services/java/com/android/server/SystemServer.java

在startOtherServices方法中添加

创建 MyApiManager.java文件

文件路径 frameworks/base/core/java/android/app/

文件路径 frameworks/base/core/java/android/app/ContextImpl

添加registerService

记住make update-api

编译打包完成后,烧写新的固件。

jar主要为了在android studio编译环境中MyApiManager报错导致编译不通过问题。

也可以导入frameworks jar包或使用反射。

在源码目录packages/app下新建MyJar文件夹

并新建目录com/myapi/(包名)

在目录com/myapi/新建文件MyApi.java

具体Android.mk语法这里不做解释,可以自行查阅

在MyApi目录下直接运行mm编译命令(记得先source build/envsetup.sh)

待编译完成后,jar生成目录

out/target/common/obj/JAVA_LIBRARIES/Myapi_intermediates/javalib.jar

可更改为其他名称。

如何使用Eclipse开发Android源码

用eclipse + ADT作为android开发工具, 可以说是很方便的,在HelloActivity小程序里我们就感觉到eclipse功能的强大。那么,我们可以用 eclipse来开发android源码吗?如果我们直接把android源码里一个工程导入eclipse,一般来说都会出现错误,说许多类库(包)找 不到。

今天找到关于怎样使用eclipse来开发android源码的官方文档:

e7 V/ [: ]! l* P+ n0 `

从该文档和实践可以总结出几点:0 J* f" t: q/ i c

1、可以使用eclipse来编辑JAVA程序、检查错误(主要是类库包含和语法方面),但是不能在eclipse上编译运行android源码,还是得在shell中make(或mm或mmm)

2、android源码文件夹里提供有一些eclipse配置文件,. n; `4 E) z5 B8 G6 V, z1 x2 a

.claapath:eclipse工程的配置文件,方便我们直接把android源码相应的文件和JAVA包导入工程# ?% B9 J, m! t% n0 t* B9 P' ?; {

android-formatting.xml和android.importorder:这个很重要,主要是用来规范我们的编码风格,更容易使我们的代码风格一致

3、把android源码作为一个工程导入eclipse时,必须注意两点

1)、新建的工程必须是java project,不能是android project,否则会破坏android源码(一般是多添加文件/文件夹)

2)、导入前最好检查.classpath里的文件在android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹)

总的来说:! P" A+ ~' ]% p9 I5 U7 V; S; B

1、用eclipse来编辑代码、检查错误

2、不在eclipse上编译、运行android源码程序,只能在命令行通过make(或mm或mmm)编译android源码

3、可以在eclipse上调试android源码程序(原理:eclipse通过ddms服务器在emulator上进行调试),并可以单步调试、断点调试。

下面,从官方文档总结出具体怎样用eclipse来开发android源码

1、建立基本的android开发环境3 {# ?0 q: D k# k) \$ R

请参考官方文档或

2、编译android源码

android源码根目录下通过make进行编译,请注意一些配置,具体可参考

3、把eclipse工程配置文件复制到android源码根目录下

cp development/ide/eclipse/.classpath ./

chmod u+w .classpath # Make the copy writable

4、修改eclipse程序的配置

1)、修改eclipse缓存设置

把eclipse.ini(在eclipse软件的安装目录下)的3个值改为下面的值:

-Xms128m/ i2 t! A4 p! Z% V/ q# o" J

-Xmx512m; J  z8 E. @' z' D' D3 W

-XX:MaxPermSize=256m

2)、把android-formatting.xml和android.importorder导入eclipse

android-formatting.xml、.classpath和android.importorder都放在development/ide/eclipse/下

android-formatting.xml用来配置eclipse编辑器的代码风格;android.importorder用来配置eclipse的import的顺序和结构。( S8 q$ p' T* x" \/ H7 a

在window-preferences-java-Code style-Formatter中导入android-formatting.xml+ X" y* b! N$ m

在window-preferences-java-Code style-Organize Imports中导入android.importorder# F  d5 X" H. X

3)、安装anyedit插件(可选)# G9 C; h/ Z q5 D! s8 z7 y9 _

在下载并导入eclipse中+ J. X# @5 ?3 r3 U

5、把android源码作为一个工程导入eclipse

导入前先检查.classpath里的文件在android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹),.classpath里多余的路径可删除- ]! U4 n$ @: ~9 b+ A1 |- z

新建Java Project(不是android project,否则会破坏android源码),选择从已存在的工程导入,工程名任意,完成。

导入时,eclipse要build工程,比较慢。导完后,一般都没有错误。" B( U  i% w# w* y4 ]

6、eclipse上调试android里的程序。

先执行:$ K+ H, r. }, v. _  U5 q' x ~, I

cd android源码目录

. build/envsetup.sh

lunch 1 # to build the emulator

emulator  # you should see a GUI picture of a phone$ q- {/ n6 z+ {. k0 O I0 \- p

ddms  # you should get a splufty debugging console

然后在eclipse中配置调试类型和端口:5 z8 t( q* A+ o- g7 L# _

在Run-Debug Configurations-Remote java application上双击,然后,”Host:”设为localhost,”Port:”设为8700,”Connection Type”为Standard(Socket Attach)

然后“Apply”- Q7 I( \8 v4 B  A9 R/ Q u

注意,在点击”Debug”时苦出错,说8700端口被占用,那么把DDMS程序关掉,重新打开DDMS就OK了。如果提供连不到VM错误时,请注意,要先在DDMS中选中某一进程(对应某一应用程序),才能在eclipse执行 Debug。. B% \* E! T, K7 N8 U  b

在eclipse调试时,可以设断点、单步调试。估计google团队也是这样开发、调试android应用程序的 X: n6 t" |% B4 E

7、编译android源码2 ?: `9 i0 O1 U; E* |+ Z' ]/ r

执行:

cd android源码目录0 v1 Z; p1 P0 |$ V6 x5 A. @$ S2 o7 p

. build/envsetup.sh$ R! h! ^- l/ l: i5 P

那么就会多出mm/mmm等命令,mm/mmm用来编译模块(包括C、C++、JAVA程序)。我们也可以直接在 android源码根目录下执行“make 模块名”来编译模块。

来自开源中国网老枪的分享

Android TV开发焦点移动源码分析

点可以理解为选中态,在Android TV上起很重要的作用。一个视图控件只有在获得焦点的状态下,才能响应按键的Click事件。

相对于手机上用手指点击屏幕产生的Click事件, 在TV中通过点击遥控器的方向键来控制焦点的移动。当焦点移动到目标控件上之后,按下遥控器的确定键,才会触发一个Click事件,进而去做下一步的处理

在处理焦点的时候,有一些基础的用法需要知道。

首先,一个控件isFocusable()需要为true才有资格可以获取到焦点。如果想要在触摸模式下获取焦点,需要通过setFocusableInTouchMode(boolean)来设置。也可以直接在xml布局文件中指定:

keyEvent 分发过程:

而当按下遥控器的按键时,会产生一个按键事件,就是KeyEvent,包含“上”,“下”,“左”,“右”,“返回”,“确定”等指令。焦点的处理就在KeyEvent的分发当中完成。

首先,KeyEvent会流转到ViewRootImpl中开始进行处理,具体方法是内部类 ViewPostImeInputStage 中的 processKeyEvent :

接下来先看一下KeyEvent在view框架中的分发:

这里也是可以做焦点控制,最好是在 event.getAction() == KeyEvent.ACTION_DOWN 进行.

因为android 的 ViewRootlmpl 的 processKeyEvent 焦点搜索与请求的地方 进行了判断if (event.getAction() == KeyEvent.ACTION_DOWN)

• 首先ViewGroup会一层一层往上执行父类的dispatchKeyEvent方法,如果返回true那么父类的dispatchKeyEvent方法就会返回true,也就代表父类消费了该焦点事件,那么焦点事件自然就不会往下进行分发。

• 然后ViewGroup会判断mFocused这个view是否为空,如果为空就会return false,焦点继续往下传递;如果不为空,那就会return mFocused的dispatchKeyEvent方法返回的结果。这个mFocused其实是ViewGroup中当前获取焦点的子View

发现执行了onKeyListener中的onKey方法,如果onKey方法返回true,那么dispatchKeyEvent方法也会返回true

如果想要修改ViewGroup焦点事件的分发

• 重写view的dispatchKeyEvent方法

• 给某个子view设置onKeyListener监听

下面再来看一下如果一个页面第一次进入,系统是如何确定焦点是定位在哪个view上的

由于DecorView继承自FrameLayout,这里调用的是ViewGroup的requestFocus

descendantFocusability:

• FOCUS_AFTER_DESCENDANTS:先分发给Child View进行处理,如果所有的Child View都没有处理,则自己再处理

• FOCUS_BEFORE_DESCENDANTS:ViewGroup先对焦点进行处理,如果没有处理则分发给child View进行处理

• FOCUS_BLOCK_DESCENDANTS:ViewGroup本身进行处理,不管是否处理成功,都不会分发给ChildView进行处理

因为 PhoneWindow 给 DecoreView 初始化时设置 了 setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS),所以这里默认是FOCUS_AFTER_DESCENDANTS

到此第一次请求焦点的过程基本告一个段落

焦点移动的时候,默认的情况下,会按照一种算法去找在指定移动方向上最近的邻居。在一些情况下,焦点的移动可能跟开发者的意图不符,这时开发者可以在布局文件中使用下面这些XML属性来指定下一个焦点对象:

在KeyEvent分发中已经知道如果分发过程中event没有被消耗,就会根据方向搜索以及请求焦点View

流程一:查找用户指定的下一个焦点

流程二:获取搜索方向上所有可以获取焦点的view,使用算法查找下一个view

addFocusables() 获取搜索方向上可获得焦点的view

descendantFocusability属性决定了ViewGroup和其子view的聚焦优先级

• FOCUS_BLOCK_DESCENDANTS:viewgroup会覆盖子类控件而直接获得焦点

• FOCUS_BEFORE_DESCENDANTS:viewgroup会覆盖子类控件而直接获得焦点

• FOCUS_AFTER_DESCENDANTS:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

addFocusables 的第一个参数views是由root决定的。在ViewGroup的focusSearch方法中传进来的root是DecorView,也可以主动调用FocusFinder的findNextFocus方法,在指定的ViewGroup中查找焦点。

FocusFinder.findNextFocus 查找焦点


当前文章:android开发源码,Android源码
当前网址:http://chengdu.cdxwcx.cn/article/dsioeoj.html