将修改过的Android 4.0 源码如何正确合理的拷贝到 4.1上

wozhengzai512 2012-12-05 04:04:51
在修改Android 系统源码时,比如现在我有两套面向两个不同芯片的4.0.4 Android 源码,以下简称为A源码,B源码,A / B 源码生成的Android系统用户操作及视觉都是一样的。现在我使用A源码生成的 systemUI.apk(状态栏) 放到 B源码生成的系统里面,这时会出现错误。错误情况大多为以下这类型的话:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.phone/com.android.phone.InCallScreen}: android.view.InflateException: Binary XML file line #52: Error inflating class com.android.phone.InCallTouchUi
E/AndroidRuntime( 8656): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1964)
E/AndroidRuntime( 8656): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1989)
E/AndroidRuntime( 8656): at android.app.ActivityThread.access$600(ActivityThread.java:126)
E/AndroidRuntime( 8656): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1155)
E/AndroidRuntime( 8656): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8656): at android.os.Looper.loop(Looper.java:137)


又比如我有4.0.4 和 4.1 两种面向同一芯片版本的源码,但把 4.0.4 版本的 systemUI.apk(状态栏)放到 4.1系统的里面也同样出错。

当然除了systemUI.apk(状态栏),还有 Phone.apk / Setting.apk 这些涉及到 FrameWork 资源的都会。

问题1:这个一般是什么原因造成的?是否因为 systemUI.apk(状态栏) 涉及到 FrameWork 资源,而不同版本的FrameWork资源不相同而致使 apk 出错?

问题2:是否是不同系统编译出来的资源ID不一样,导致凡是引用到Framework资源ID的多少都会出现问题。敢问系统的资源ID在哪里可以看到。eclipse的R文件可以看到资源ID,但系统 mmm 编译我不知道在哪里。

问题3:一般由一个旧系统升级到一个新系统,比如4.0升到4.1,难道只有重写代码这条路,就不能利用之前写的那些(就是把就系统的整个apk的源码放到新系统里面,而不是在新系统一行行改)?各位一般如何升的,求一种合理的升级方法。

我初学不久,词语可能用得不恰当,标题都不知道用什么关键词,敢情各位不吝赐教。
...全文
662 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyq_yangy 2012-12-12
  • 打赏
  • 举报
回复
不同版本的资源id是会不一样。你可以检查framewor/base/core/res下的styles.xml,themes.xml,attrs.xml等,比较一下。 另外framework生成的中间文件R.java也在out目录下,可以比较下你的两个版本哪些不同。 所以,用到系统资源,特别是verdor又修改了,那就只有再新的平台上重新编译。。。
HHLgolden110 2012-12-12
  • 打赏
  • 举报
回复
引用 17 楼 wozhengzai512 的回复:
引用 15 楼 HHLgolden110 的回复:引用 13 楼 wozhengzai512 的回复:引用 12 楼 HHLgolden110 的回复:拿楼主的比如Launcher例子来说把, 楼主是要将4.0的直接放到4.1上跑起来?还是将4.0上你改的东西在4.1的源码上也修改? 如果是,那就没多大意义,因为4.1的比4.0的功能是更完善的,比如桌面应用程序、快捷……
报的是这个错?你看哪个类调用到的然后报错,然后细看那个地方,应该有详细日志的
wozhengzai512 2012-12-12
  • 打赏
  • 举报
回复
引用 19 楼 oyq_yangy 的回复:
不同版本的资源id是会不一样。你可以检查framewor/base/core/res下的styles.xml,themes.xml,attrs.xml等,比较一下。 另外framework生成的中间文件R.java也在out目录下,可以比较下你的两个版本哪些不同。 所以,用到系统资源,特别是verdor又修改了,那就只有再新的平台上重新编译。。。 ……
嗯,多谢提示。
wozhengzai512 2012-12-12
  • 打赏
  • 举报
回复
引用 18 楼 HHLgolden110 的回复:
报的是这个错?你看哪个类调用到的然后报错,然后细看那个地方,应该有详细日志的
这个错误我知道了,但是确切的原因没敢肯定。我先说我环境及硬件,我好阐述事件的过程。首先 我有A手机芯片及B手机芯片,A芯片使用的4.0.4 Android版本系统,B芯片与A芯片一样,但由于A / B是不同的芯片,他们的硬件驱动/kernel 等设置是不一致,仅仅是Android应用层相同而已,所以他们是有着相同的Android版本的不同系统。 以上 两个 测试: (1)现在我有A芯片的手机,结果我使用B芯片系统编译得到的Phone.apk(通话中的那个apk)push到A芯片手机中,就出现了 Can't convert to dimension: type=0x3 这个错误。后来我想起应该使用 A 芯片系统来编译 B 芯片的源码,结果编译得到的 apk就可以在 A 芯片手机上运行了。 (2)我使用更高版本(即4.1版本Android系统,面向A芯片的源码,测试手机也是A芯片)的系统编译 A芯片 4.0.4 版本源码,出现的错误很明显,4.1的源码改动了,接口找不到,编译没通过,如果我把这些错误都解决了还不如直接在新系统中修改! 收获: (1)这个错误给我一个警示:似乎不同的系统编译得到的 R.java 是不一样的,尽管他们的Android版本是一致的。但这个都是猜测,我并没有确切的证据,所以我会像19楼提示的那样再对比R.java 。 (2)旧版的不能在新版本上运行错误就明显很多了,源码直接不同,但除了这些我想它还会涉及到 资源id的问题。 整理一下,以上这些好像没什么用,但在我脑海里犹如一个黑洞,这个版本的出现,代码的移植多少都会有人遇到吧,但并没有看到有人问这样的问题或相关的分析。我想是我不想重写太多代码,呵呵。我想这个对我了解Android会有帮助,从这些问题可以引申出其他问题。
HHLgolden110 2012-12-11
  • 打赏
  • 举报
回复
引用 13 楼 wozhengzai512 的回复:
引用 12 楼 HHLgolden110 的回复:拿楼主的比如Launcher例子来说把, 楼主是要将4.0的直接放到4.1上跑起来?还是将4.0上你改的东西在4.1的源码上也修改? 如果是,那就没多大意义,因为4.1的比4.0的功能是更完善的,比如桌面应用程序、快捷方式、插件支持相互之间托动交换位置; 如果不是,那就要基于4.1的源码,将你在4.0上改的东西在4.……
按你这样的话,你的应用都是4.0的,其他的都是4.1的,这样看出来不还是4.0的嘛?体验不到4.1的效果,还不如直接全部用4.0的呢; 资源ID错乱是不大可能的,因为你调用的4.0上公开的系统资源4.1上都会有, 那些隐藏的方法之类的,就得一个一个抓log看了,没什么好的方法,哪个方法报错,你就到framework下去找,然后对比4.0和4.1的,找到了直接换一个就行; 我不知道你的4.0、4.1是基于谷歌源码还是CM团队的还是其他的?
wozhengzai512 2012-12-11
  • 打赏
  • 举报
回复
引用 15 楼 HHLgolden110 的回复:
引用 13 楼 wozhengzai512 的回复:引用 12 楼 HHLgolden110 的回复:拿楼主的比如Launcher例子来说把, 楼主是要将4.0的直接放到4.1上跑起来?还是将4.0上你改的东西在4.1的源码上也修改? 如果是,那就没多大意义,因为4.1的比4.0的功能是更完善的,比如桌面应用程序、快捷方式、插件支持相互之间托动交换位置; 如果不是,……
是供应商提供的源码,在google基础上改过了一些,添加了一些功能。 目前遇到一个有关Framework的问题: Can't convert to dimension: type=0x3 ,查了查没有什么头绪,不知道 type=0x3 代表着什么意思
wozhengzai512 2012-12-11
  • 打赏
  • 举报
回复
引用 14 楼 ConnectionUtils 的回复:
你直接install 4.0版本的Launcher到 4.1的系统上 切换到4.0的launcher时 抓取日志信息 看异常信息 调试啊~~~
一直都调试,现在稍微看懂调试信息是什么意思
wozhengzai512 2012-12-10
  • 打赏
  • 举报
回复
引用 12 楼 HHLgolden110 的回复:
拿楼主的比如Launcher例子来说把, 楼主是要将4.0的直接放到4.1上跑起来?还是将4.0上你改的东西在4.1的源码上也修改? 如果是,那就没多大意义,因为4.1的比4.0的功能是更完善的,比如桌面应用程序、快捷方式、插件支持相互之间托动交换位置; 如果不是,那就要基于4.1的源码,将你在4.0上改的东西在4.1上重新做一次,说是做一次,其实就是把修改的文件重……
我是将修改过的4.0放到4.1上运行,假如我想快速移植,又不需要4.1上其他更完善的功能,比如因为我4.0上修改的效果比较独特,有个性,所以我就想直接使用。根据你的回答,我大概知道答案。 其实除了launcher外我们还要修改其他的比如setting.apk/phone.apk/systemUI.apk/lockscreen.apk等与franmwork挂钩的apk,4.0的源码放在4.1上运行可编译完成,但放机器上就出错。 我要确定到底是什么问题导致出错,方便日后修改啊。不知这位仁兄对此有什么看法,我估计的原因除了4.0与4.1有不一致的api外,最可能导致出错的原因是不同系统编译出来的frameword资源ID是不一样的,所以有些apk在4.0正常,但改到4.1系统由于找不到对应的资源ID或ID改变而出错。可是这些都是我猜测的,并没有得到认证,求高人解答
HHLgolden110 2012-12-10
  • 打赏
  • 举报
回复
拿楼主的比如Launcher例子来说把, 楼主是要将4.0的直接放到4.1上跑起来?还是将4.0上你改的东西在4.1的源码上也修改? 如果是,那就没多大意义,因为4.1的比4.0的功能是更完善的,比如桌面应用程序、快捷方式、插件支持相互之间托动交换位置; 如果不是,那就要基于4.1的源码,将你在4.0上改的东西在4.1上重新做一次,说是做一次,其实就是把修改的文件重新改一遍; 还有像楼主说第三方的桌面,能在android很多版本上跑起来,而Android的自带Launcher却不能,因为系统的应用都有直接调用系统隐藏的方法之类的,而随着版本的升级,那些隐藏Api里面的方法可能参数会变,又或者名字会变,所以不能通用,如果你想通用,那你把那些隐藏的方法全部去了,用其他方式实现
wozhengzai512 2012-12-10
  • 打赏
  • 举报
回复
引用 10 楼 Diduce 的回复:
Diduce 2012-12-10
  • 打赏
  • 举报
回复
csdn_2013 2012-12-10
  • 打赏
  • 举报
回复
引用 5 楼 wozhengzai512 的回复:
引用 4 楼 ConnectionUtils 的回复: 涉及到framework底层的东西 就需要对比一下4.0和4.1的代码 相应的一个功能、一个功能的添加 修复 慢慢的移植 这个工作量实际上并不比在新系统上重写少。其实我并不是害怕看源码,害怕重写。我只是想找一个确认的原因,这个问题就像一个黑洞一样,找不出只有重写这条道,对以后系统更换相当不利。 还是拿具体点的例子说吧,要不太……
LZ如果想移植Launcher 可以将4.0上面的Launcher.apk【4.0的包名最好不要和4.1的包名一致】 install到4.1系统的板子或手机上 切换到4.0的launcher来调试
csdn_2013 2012-12-10
  • 打赏
  • 举报
回复
你直接install 4.0版本的Launcher到 4.1的系统上 切换到4.0的launcher时 抓取日志信息 看异常信息 调试啊~~~
wozhengzai512 2012-12-08
  • 打赏
  • 举报
回复
引用 6 楼 l417584711 的回复:
分清楚应用和系统的区别 要是系统那么容易移植 那么android4.2开源第二天都是4.2的系统了
就是因为不容易移植才发问的…… 应该有很多人遇到这个问题的啊,都会有这样的疑问的啊
aSysBang 2012-12-08
  • 打赏
  • 举报
回复
分清楚应用和系统的区别 要是系统那么容易移植 那么android4.2开源第二天都是4.2的系统了
wozhengzai512 2012-12-08
  • 打赏
  • 举报
回复
引用 4 楼 ConnectionUtils 的回复:
涉及到framework底层的东西 就需要对比一下4.0和4.1的代码 相应的一个功能、一个功能的添加 修复 慢慢的移植
这个工作量实际上并不比在新系统上重写少。其实我并不是害怕看源码,害怕重写。我只是想找一个确认的原因,这个问题就像一个黑洞一样,找不出只有重写这条道,对以后系统更换相当不利。 还是拿具体点的例子说吧,要不太空洞。比如我要修改 Launcher ,我在 4.0 上写好了,新系统 4.1 出来了,现在我要将 4.0 上写好的 Launcher 移到 4.1 上。 我们知道 Launcher 在源码中属于一个相对独立的 apk(当然可能会引用一些包或so文件),这个不会涉及到 framework 了,但为什么运行不了? 为什么第三方写的 Launcher 桌面在绝大部分的系统中都能用?只看代码真不知道个所以然来
csdn_2013 2012-12-07
  • 打赏
  • 举报
回复
LZ 的问题 我就不一一回答了 费劲。 首先你移植4.0的某些功能时,先要了解4.1有哪些特性、对比4,1和4,。0 看4.1在4.0的基础上做了哪些修改功能或者BUG 如果是整个应用移植 与framework底层、其他的没什么挂钩就可以直接放在package/app 或这vender...路径下 涉及到framework底层的东西 就需要对比一下4.0和4.1的代码 相应的一个功能、一个功能的添加 修复 慢慢的移植
wozhengzai512 2012-12-07
  • 打赏
  • 举报
回复
wozhengzai512 2012-12-06
  • 打赏
  • 举报
回复
wozhengzai512 2012-12-05
  • 打赏
  • 举报
回复
挽尊,高调求教
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
源码链接: https://pan.quark.cn/s/a4b39357ea24 小程序雷达 AI 驱动的小程序生态选型与风险评估工具,把微信小程序开发资源转化为可筛选、可评估、可对比的技术雷达。 线上地址 主站: Vercel: 适合谁 正在做微信小程序技术选型的产品、研发和架构团队。 需要判断 Taro、uni-app、原生小程序、组件库、云开发和 SDK 风险的团队。 需要把历史 awesome 列表转成可筛选、可对比、可验证技术雷达的维护者。 可以做什么 Radar:按推荐状态、风险等级、资源类型、分类和适用场景浏览小程序生态资源。 Quick Search:快速搜索资源并跳转常用页面。 Compare:对比 Taro、uni-app、原生小程序等核心方案。 Advisor:输入选型问题,获得推荐结论、适用/不适用条件、迁移成本、下一步和证据来源。 Doctor:粘贴小程序项目配置,识别框架依赖、过时方案和迁移风险。 Weekly:查看小程序生态周报和近期风险信号。 数据概览 当前数据集中包含 236 个小程序生态资源。 完整资源可在 Radar 页面和导出能力中查看。 核心样例 Taro ★30.6k+ - 使用 React 的方式开发小程序的框架,同时支持生成多端应用 uni-app ★36.1k+ - 使用 Vue 语法开发小程序、H5、App的统一框架 MPX ★2.1k+ - 增强型小程序框架,深度性能优化,支持跨小程序平台开发,完全兼容原生小程序组件 WePY ★21.7k+ - 支持组件化的小程序开发框架 vant-weapp ★12.3k+ - 高颜值、好用、易扩展的微信小程序 UI 库 tdesign-miniprogram ★1.3...

80,488

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧