问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用Android Studio开发/调试Android自带系统应用

发布网友 发布时间:2022-04-24 00:09

我来回答

1个回答

热心网友 时间:2023-10-14 22:16

开发调试环境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码
由于AS是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA
一、修改Android Studio(以下简称AS)的内存配置

因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一个没有classpath的JDK, 这样可以确保使用源码里的库文件

并将其作为要使用的SDK的Java SDK。如下图

三、生成导入AS所需配置文件(*.ipr)
①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)
②检查out/host/linux-x86/framework/目录下是否有idegen.jar
如果idegen.jar不存在,执行:
mmm development/tools/idegen/

在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。
我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。
③执行
development/tools/idegen/idegen.sh

等待出现类似下面的结果:
Read excludes: 5ms
Traversed tree: 44078ms

这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ IDEA(AS是基于IntelliJ IDEA社区版开发的)的配置文件
Tips:
AS在导入代码时比较慢,建议先修改android.iml,将自己用不到的代码exclude出去.可以仿照过滤.repo文件夹的语法,如:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
这样在导入时就会跳过abi和art文件夹.过滤的越多,AS的处理速度就会越快.
④在AS中打开源码根目录下新生成的android.ipr

如果在导入时AS出现

则建议按照其给定的解决方法来解决(网址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit),具体内容如下图:

四、解决源码中跳转错误问题
①为当前工程设置正确的SDK和JDK

②设置'Moles'的依赖

先将所有依赖删掉,只留下上图'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源码
我们可以通过给刚导入的工程在'Moles'中添加'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来解决该问题。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
黄山门户网主要栏目 壹家居品牌简介 湖南乐享生活家居有限公司一站式毛坯房解决方案 服务器出租 电脑上的时间日期不同步怎么办 台式电脑时间不同步怎么解决? 关于清明节的小学作文400字 微信怎么查询自己名下的微信 如何查看微信实名认证了几个账号 轿车120时速撞击力有多大? AndroidStudio里怎么重启软件AS,直接restart 安卓开发 as java 这个tag的意义是啥? android studio怎么查看方法注释 什么叫无所为而为? Android studio怎么创建Android虚拟机 “而为鼠所啮”的“为”是什么意思? 尽力而为的意思? 任性而为和率性而为有什么区别? 率性而为什么意思 初中文言文“女娲祷神祠,祈而为女媒,因置婚姻”,这句话中的“而”“为”分别怎么翻译? 急求然、而、为在文言文中的用法!!越全越好!! 常以肃杀而为心 “以”“而”“为”分别什么意思 《六国论》“而为秦人积威之所劫哉”的“为”怎么读?为什么? 碌碌而为什么意思 请问“如何而为”中的“而为”是什么意思? 率性而为是什么意思? 顺势而为是什么意思 “明知不可为而为之”究竟是什么意思? 无所为而为 是什么意思? 被关联的支付宝账号聊天记录会泄露吗? Android Studio 比 Eclipse 好用在哪里 Android Studio如何运行其他人的项目?新手! 安卓开发只用Android studio好,还是综合用比较好? android开发,Android Studio和IDEA哪个更好用?优势在哪 android studio怎么运行安卓工程 如何查看android studio版本 如何使用Android Studio创建工程并把它设为Library工程 买保险时,为什么一定要写清楚受益人 买保险必须有受益人吗 “受益人”空白谁受益?购买保险时,指定受益人很重要 买保险需要注意受益人的要求吗? 买保险,到底是应该给孩子买,还是给大人买,受益人填孩子呢?! 买保险,受益人可以暂时不写吗 请问购买商业保险,必须写保险受益人吗,这个保险受益人应该写谁比较好,需要什么手续?另外买保险后,以 高潮流很多水是什么 高潮时就像尿尿一样,流出很多水是什么原因? 为什么女人高潮时水特别多呢 女人出潮经水是什么情况 每次做爱阴道都有很多水流出事怎嘛回事 女生性欲高时阴道流出的水是什么东西?