b2c信息网

您现在的位置是:首页 > 今日新闻 > 正文

今日新闻

android源码插桩修改(android 插桩原理)

hacker2022-10-07 01:20:26今日新闻103
本文目录一览:1、android怎么修改源码2、

本文目录一览:

android怎么修改源码

在Android界面的系统status bar上添加home,back,menu三个菜单,并完成对应的系统功能。并有higlight效果,修改status bar 高度和status bar上的文字尺寸。

这需要修改android sdk才能完成,我用的是eclair.下面就我的操作进行叙述。

1.首先完成界面显示效果。

需要修改文件

./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java,仿照mBatteryIcon等icon的添加方式添加自定义的icon,图片名称指定就好了。另外还要记得修改./frameworks/base/core/res/res/values/arrays.xml,这里定义了icon的slot,并且决定了icon的摆放顺序。

这样,你需要的icon按键就可以显示在系统的status bar上面了。

2.判断touch event是否按动了某个icon

需要修改的文件

./frameworks/base/services/java/com/android/server/status/StatusBarView.java

首先在onTouchEvent函数中,获取当前event的坐标,然后比较是否在某个按键范围之内。由于系统对于statusBar的范围已经有了定义,所以这里只需要比较横坐标就可以了。

其次,也是这一步最关键的,怎么获取具体某一个icon的左右边界坐标呢?系统的status bar左边显示的图标都是notification, 右边显示的是系统icon. 也就是说左边icon属于mNotificationIcons,右边的icon属于mStatusIcons. 在文件StatusBarView.java中出现的offset = getViewOffset(mStatusIcons),得到mStatusIcons的最左边的icon的left横坐标。用N = mStatusIcons.getChildCount()得到共有几个系统icon,其中包含visibility为false的icons.用mStatusIcons.getChildAt(N-i)得到的是从右边数第i个的icon view. 这个view的getLeft()+offset就是这第i个icon的左边横坐标,对应的getRight()+offset就是这第i个icon的右边横坐标。本例中home键是右边第2个icon.

3.定义icon响应事件

这里使用的方法是在StatusBarView.java中向

./frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java发送一个Broadcast,让StatusBarPolicy来完成具体的事件操作。这里需要注意的是不仅要在./frameworks/base/core/java/android/content/Intent.java中定义intent,还要在StatusBarPolicy的构造函数中添加该intent的过滤动作,即filter.addAction(Intent.ACTION_BACKICON_CHANGED).例如,按动了back键,如果当前事件为action_up,就向系统发送一个keyEvent,keyCode为KeyEvent.KEYCODE_BACK. 这里借用的是./frameworks/base/cmds/input/src/com/android/commands/input/Input.java中的sendKeyEvent函数,直接拷贝过来,按照需要稍微修改一下形参就可以了,过程不要修改。

需要说明的是,当点击statusBar可以拉出来一个notification列表,当这个列表显示出来的时候,这三个back, menu, home键的响应速度会非常慢,所以这时不响应事件并隐藏这三个键。具体做法是在StatusBarView的onTouchEvent()中判断mService.mExpanded或者 mService.mTracking为真时就不做响应。mService是StatusBarService对象。隐藏三个键也是用Broadcast来做的,但这个intent是由StatusBarServie发出来的,当mExpandedVisible = false时显示,当mExpandedVisible = true时隐藏。

这里还同时完成了highlight换图的动作,也是用Broadcast来做得,处理过程一样,就是需要区分action_down和action_up就可以了。

4.调整status bar的高度

如果你需要显示较大的屏幕尺寸,同时statusBar的高度要拉大,上面的icon的size也需要调大。为了协调一致,显示时间的字体和notification显示的日期的字体也需要调大。具体做法如下:

a.调节status bar icon的size: 只调节status_bar.xml的textSize标签似乎不起作用,同时又修改了./base/services/java/com/android/server/status/StatusBarIcon.java的t.setTextSize(32);语句才成功。不知道修改status_bar.xml的com.android.server.status.AnimatedImageView标签下的layout_height值是不是必须的,反正我是一起都给改了。

b.调节status bar height: ./base/core/res/res/values/dimens.xml 找得我好辛苦!不知道还需不需要修改./base/core/res/res/values/themes.xml中的Window attributes的windowTitleSize值,反正我也给改了。

c.调节notification显示日期字体的大小,修改status_bar.xml的com.android.server.status.DateView的textSize值。

到这里,就完成了所有工作,看看效果吧。

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

一、修改AndroidStudio(以下简称AS)的内存配置因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms和-Xmx的值。文档中使用的是748m,可自行修改。二、配置AS的JDK、SDK在IDE中添加一个没有classpath的JDK,这样可以确保使用源码里的库文件三、生成导入AS所需配置文件(*.ipr)①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)②检查out/host/linux-x86/framework/目录下是否有idegen.jar如果idegen.jar不存在,执行:mmmdevelopment/tools/idegen/在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。③执行development/tools/idegen/idegen.sh等待出现类似下面的结果:Readexcludes:5msTraversedtree:44078ms这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJIDEA(AS是基于IntelliJIDEA社区版开发的)的配置文件④在AS中打开源码根目录下新生成的android.ipr四、解决源码中跳转错误问题①为当前工程设置正确的SDK和JDK②设置'Modules'的依赖先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)点击上图中'2'指向的'+'并选择上图'3'指向的'Jarsordirectories'选项,依次将frameworks和external文件夹添加进来五、DEBUG源码我们可以通过给刚导入的工程在'Modules'中添加'AndroidFramework'来让AS将它作为一个Android工程,从而方便我们调试代码.在弹出的选择进程(ChooseProcess)对话框中,勾选显示所有进程,选择要DEBUG的代码所在的进程,点击OK即可.六、其它代码中很多地方提示CallrequiresAPILevelx.出现这个问题是因为AS将我们的工程当做安卓应用程序工程了,且源码中没有指定minSdkVersion.我们只需在源码根目录加一个声明minSdkVersion的AndroidManifest.xml文件即可(分享了一个AndroidManifest.xml)。也可以考虑使用build.gradle来解决该问题。

用别人的android代码怎么修改

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

2、android 源码文件夹里提供有一些 eclipse 配置文件, .claapath:eclipse 工程的配置文件,方便我们直接把 android 源码相应的文件和 JAVA 包导入工程 android-formatting.xml 和 android.importorder:这个很重要,主要是用来规范我们的编码风格,更容 易使我们的代码风格一致

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

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

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

总的来说: 1、用 eclipse 来编辑代码、检查错误

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

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

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

1、建立基本的 android 开发环境 请参考官方文档或<android 模拟器在 ubuntu8.10 的安装> 2、编译 android 源码 android 源码根目录下通过 make 进行编译,请注意一些配置,具体可参考<android 源码的编译>

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 -Xmx512m -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 的顺序和结构。 在 window-preferences-java-Code style-Formatter 中导入 android-formatting.xml 在 window-preferences-java-Code style-Organize Imports 中导入 android.importorder 3)、安装 anyedit 插件(可选) 在 下载并导入 eclipse 中

5、把 android 源码作为一个工程导入 eclipse 导入前先检查.classpath 里的文件在 android 源码中是否有相应的文件 (文件夹) 否则也会破坏 android , 源码(一般是多添加文件/文件夹),.classpath 里多余的路径可删除 新建 Java Project(不是 android project,否则会破坏 android 源码),选择从已存在的工程导入,工 程名任意,完成。 导入时,eclipse 要 build 工程,比较慢。导完后,一般都没有错误。

6、eclipse 上调试 android 里的程序。 先执行: cd android 源码目录 . build/envsetup.sh lunch 1 emulator ddms # to build the emulator # you should see a GUI picture of a phone # you should get a splufty debugging console 然后在 eclipse 中配置调试类型和端口: 在 Run-Debug Configurations-Remote java application 上双击,然后,”Host:”设为 localhost,” Port:”设为 8700,”Connection Type”为 Standard(Socket Attach) 然后“Apply” 注意,在点击”Debug”时苦出错,说 8700 端口被占用,那么把 DDMS 程序关掉,重新打开 DDMS 就 OK 了。 如果提供连不到 VM 错误时,请注意,要先在 DDMS 中选中某一进程(对应某一应用程序),才能在 eclipse 执行 Debug。 在 eclipse 调试时,可以设断点、单步调试。估计 google 团队也是这样开发、调试 android 应用程序的

7、编译 android 源码 执行: cd android 源码目录 . build/envsetup.sh 那么就会多出 mm/mmm 等命令, mm/mmm 用来编译模块 (包括 C、 C++、 JAVA 程序)我们也可以直接在 android 。 源码根目录下执行“make 模块名”来编译模块。 Android 源码中添加 修改应用 Posted on 2010-08-19 13:37 zhangweia 阅读(1607) 评论(0) 编辑 收藏 第一部分:添加一个新的应用 1. 在和系统相同版本的 SDK 目录下开发自己的 android 应用 2. 把开发的 android 工程放到源码的 packages/apps/目录下 3. 在工程目录下添加 Android.mk 文件,修改 LOCAL_PACKAGE_NAME :=test001 把工程名指定为 自己的工程名,我加载的工程为 test001 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := user LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_STATIC_JAVA_LIBRARIES := googlelogin-client LOCAL_PACKAGE_NAME :=test001 LOCAL_CERTIFICATE := shared include $(BUILD_PACKAGE) # Use the folloing include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH)) 4. 回到源码目录,然后执行 . build/envsetup.sh 注意 sh 后面有个空格 5. 执行 mmm packages/apps/test001 编译 test001.apk 包 6. 执行 make snod,编译 system.img 包 7. 执行 emulator 就可以在应用程序下看到自己编译的工程了 第二部分:修改原有的 Android 应用 1. 首先新建一个 android 工程,加载自己的 java 文件和资源文件 2. 在自己的 android 工程初步调试成功以后,把该工程的 java 文件,资源文件拷贝到联系人对应的 java 文件和资源文件目录 3. 然后在 linux 下执行以下命令,编译人联系人模块,把资源文件编译到联系人目录中 . build/envsetup.sh mmm packages/apps/Contacts 4. 刷新 android 源码工程,这个时候你就可以在 Contacts 包目录下看到你新加的资源文件和源文件了, 并可以在源码工程下修改代码并直接调试了 5. ?? 为什么不在 android 源码工程下直接添加源文件和 xml 资源文件了???? 答: 因为我们的 android 源码工程师以 java 工程导入的, 如果添加 android 的 xml 文件的话, java 程序无法识别资源 R 文件,所以我们必须先把需要的 xml 资源文件先在 linux 下编译 6. 在源码工程修改后,则可在 linux 下再次执行联系人编译命令,并 make snod 加载 system.img 文件, 并启动模拟器(emulator ),就可以看到你的修改了。 2011-04-19 修改 Android 源码的 Launcher 的例子 博客分类: ? Android AndroidOSUI 框架 Android 的 Launcher 研究:客制化桌面 UI 前言 能取得 Android OS 原始码,并修改里头的内容,有时候也颇有乐趣。最近和几位朋友聊到 「Android 框架的改造」,以及如何吸引对 Android 框架技术有兴趣的同好 一起交流的议 题;我个人认为,一开始如果能丢出一个比较有乐趣的议题,或许可以有抛砖引玉的效果。 上周在北京进行 Android 培训课程时,与 eoeAndroid 社群也进行了想法的交流,由於大家 都体认到 Android 底层技术的重要性及其价 值, 而且 eoeAndroid 社群里也有许多技术好手, 所以就和 eoeAndroid 的创办人靳岩兄有了一个共同主持研究 Android 底层技术 「同好小 组」 的想法,希望能透过社群的方式,集合大家的智慧,一起把底层技术研究清楚。 因为要让大家能有焦点,所以「发题」很重要,这个工作就由落在我身上了。由於第一次希 望题目能简单,并且有趣一点,至少要能达到发球的效果,吸引大家开始关心 Android 底层 技术,所以原则是:希望能用最简单的方式、让大家体验修改底层的乐趣。 题目说明: Launcher 第一次的题目是「Launcher」的修改。 Launcher 就是 Android 的应用程式启动器,Launcher 的功能还包含:桌面的切换、应用程 式快捷(shortcut)功能、背景图(Wallpaper)功能等等。因此,修改 Launcher 可以改变一些 很深层的 UI 功能。 在 Android 的桌面最下方, 有一个图示, 按下后可以拉出应用程式图示清单, 这是 Launcher 提供的功能。这一次,因为我们觉得这个 Launcher 的图示太制式化了,越看越不好看,所 以想要修改一下,换张图,要怎麼做到呢? 范例展示 例如,图 1 是原始的图示;图 2 是修改后的图示。 图 1: 原始图示 图 2: 帮 Launcher 妆扮一下 实作说明 1/4: 取得 Android 原始码与 EeePC 移植 这个功能并不难做,事实上,完全不用写程式。只要把图档重做就可以了。只不过前提是, 要知道: 1. 如何取得 Android OS 原始程式码 2. 如何编译 Android OS 最简单的做法是: 1. 下载 Android 原始码后、取得 EeePC 的移植(product) 2. 编译「TARGET_PRODUCT」为 eee_701 3. 由於 Launcher 都是用 Java 语法写成的, 所以不会有架构(ARM/x86/...)的问题, 编译后 可以取得 Launcher.apk;APK 套件是不分处理器平台的 先学会如何由 Android 原始码编译出 eee_701 的 image,才有办法继续进行 实作说明 2/4: 修改图档 在 Android 原始码的 packages/apps/ 目录里,存放了 Android 内建的应用程式原始码, Launcher 是 Android 的一个应用程式,所以从这里找到它的原始码,并进行修改工程。 切换到以下目录: android source/packages/apps/Launcher/ 接著要修改 src/目录下的内容,还是 res/目录下的内容呢?图档属於 Android 的 「resource」,因此当然是到 res/目录下找到我们要的图档。 切换到以下目录: android source/packages/apps/Launcher/res/ 又看到了一大堆目录,图档的部份存放於: ? ? drawable-land/ - landscope 模式的图档 drawable-port/ - portrait 模式的图档 我们先改一下 portrait 模式的图档。 找到 drawable-port/tray_handle_normal.png 档案如 下: 就是它了,换掉,把图档换成这个: 换好后重编 Android 即可。一行程式都不用改。 实作说明 3/4: 安装 Launcher.apk 重编 Android 原始码,接著可以在 out/target/product/product name/system/app/找到 Launcher.apk 套件。把 Launcher.apk 安装到 AVD(Android 模拟器)里做测试,方法如下: 1. 先启动一个 AVD 2. 执行 adb 将 Launcher.apk 手动安装到 AVD 里,指令如下: $ adb install -r your-path/Launcher.apk

如何patchrom

本帖教程只是经验之谈,不过也有一些素材来自网络,本人对此不负任何责任

这个教程介于入门和进阶之间,也就是说比如简单一点的像:rom的大体结构啊、android的基本原理啊、linux的基本操作啊。这个教程都一概略过。而比较深入的像:apk的修改、开发,源代码的修改、编写,smali插桩,移植适配其他非官方机型。这也一概没有。

本教程仅介绍如何利用MIUI放出的patchrom资源完成编译MIUI的流程,适用于对自制rom以及linux有一定了解,喜欢miui,喜欢DIY,但不太熟悉如何使用patchrom以及其基本流程的发烧友

如果你对android、linux完全是一个门外汉的话,这个教程对你来说可能会有不少无法理解的地方。而如果你如果已经是大神了,希望多多指点,跟大家交流一下你的经验。

--------------------------------------------------------------------------------

第一部分:介绍一些基本概念

首先介绍几个比较基本教程的链接

MIUI官方提供的教程:

CM官方wiki上的CM编译教程:

android官方提供的AOSP编译教程:

要学习利用开源源代码编译android rom的话,看完后面两个基本就够了,CM、PA这类的rom都可以根据CM的编译方法来编译,而AOKP这类的rom可以根据AOSP的编译方法来编译

大部分开源rom在他们的github上也会写上相关的编译流程以及主要的命令,比如PA除了用CM的编译方法手动输入每条命令来编译,也可以直接运行他们写好的build.sh来进行编译,基本上还是以实际文件和github上写明的流程为准

而MIUI当然跟这两种的编译方法都不一样,因为MIUI不是利用android源代码编译出来的,而是反编译现成的rom,修改相关smali来适配各种机型的,所以MIUI自己配置了一套编译平台,这也就是patchrom项目

都知道,android是基于linux内核的,而且谷歌也并没有提供适用于windows平台进行编译的相关代码和工具,所以要从源代码编译android是需要一个linux环境的

虽然谷歌同样也支持在苹果的mac系统上编译,但一方面mac的环境配置较为复杂,另一方面mac用户不如pc用户多,要装mac也远不如装linux方便,所以搞这个的,大部分人都是使用的linux

而基于linux内核的操作系统其实有很多,这些不同的linux系统也叫Linux发行版,最主流最常见最通用的一个版本,就是ubuntu(我个人是opensuse党,也在opensuse上编译过CM、MIUI,不过opensuse相对更复杂,而ubuntu现成的软件也更多更方便一点,所以这个教程里是使用的64位ubuntu 12.10来介绍的),而因此也有很多基于ubuntu修改的Linux发行版,比如深度的Linux Deepin和雨林木风的StartOS,所以相对来说,不论是原版ubuntu还是Linux Deepin和StartOS都比较适合刚接触linux的新手使用

以下所有输入命令的行为全是在“终端”程序中进行的,下文可能会有多处省略,所以你看到输命令可别问输在哪。

-----------------------------------------------------------------------

第二部分:编译环境的搭建

我本来是使用的12.04,64位桌面版,后来12.10出来了,就顺着更新上来了,因为我这里运营商强制上网得用他的拨号软件,所以我是在虚拟机里搭建的,其实我是推荐直接装在真机上,这样性能更好,编译速度也更快

ubuntu版本的选择、下载、安装、更换源、系统更新等等,我就不介绍了,网上教程一堆一堆的

在装好了ubuntu之后,我们就要开始android rom编译的环境配置了,大致的说一下,需要下载的文件总共有五步。

如何编辑android 系统源码

1、通过 ubuntu 软件中心安装 wine;

2、通过 ubuntu 软件中心安装 winetricks;

3、通过 winetricks 在 shell中输入: winetricks mfc42

1、通过 wine windows 的方式启动代理服务器

2、设置浏览器代理服务器

3、设置shell代理服务器:

在shell中输入 sudo gedit /etc/bash.bashrc

在文件 /etc/bash.bashrc 中添加

通过shell安装如下的组件:

1、sudo apt-get install bison g++-multilib git gperf libxml2-utils

2、新建一个存放源码的目录,如:mkdir ~/andorid/source

3、在源码目录中输入命令:repo init -u -b android-4.0.1_r1

其中: android-4.0.1_r1是android源码的版本,更多的版本可以通过下面的方式查询:

4、修改source/.repo/manifest/default.xml 文件中的 fetch 的值为:

git://Android.git.linaro.org/

通过如下的指令来设置邮箱和用户名

git config --global user.name "your name" ----修改用户名git config --global user.email "your email" ----修改email

5、在source目录下输入指令:repo sync

便开始了代码的下载

方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

android 怎么样修改源码文件

 1、Android的文件系统结构是怎样的,我们安装 1、Android的文件系统结构是怎样的,我们安装的程序放在那里? 编译Android源码之后,在out/target/product/generic一些文件: ramdisk.img、system.img、userdata.img、 system、 data、root 其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。 ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。 2、Android SDK和android源码能为我们提供什么工具?  的程序放在那里? 编译Android源码之后,在out/target/product/generic一些文件: ramdisk.img、system.img、userdata.img、 system、 data、root 其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。 ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。 2、Android SDK和android源码能为我们提供什么工具?  

发表评论

评论列表

  • 慵吋卿忬(2022-10-07 08:09:15)回复取消回复

    用来配置 eclipse 编辑器的代码风格;android.importorder 用来配置 eclipse 的 import 的顺序和结构。 在 window-prefer