再次解决,android 2.3运行凯立德问题

news/2024/10/18 18:27:17/

我的Hero最近刷了2.3的ROM,原来在2.1下可以使用的凯立德又FC了,估计又是android的API接口改变了,又不兼容了,还好当时在有过解决在1.5时代到2.1凯立德不兼容的经验(这个当时也我第一个发布可以在2.1下使用的凯立德,http://www.hiapk.com/bbs/thread-320372-1-1.html)
现在有好几个版本的凯立德,我试过都不能在2.3的hero(480*320)的分变率下运行
有个什么零售版的,这个可以支持3D路口显示,但是无奈,这个问题不要重,不容易解决,所以我还是选择了最早的哪个版本来攻破,对这个我也比较熟,搞起来方便

改好后的下载地址 http://www.hiapk.com/thread-928729-1-3.html
也说说这个版本凯立德为什么在2.3下又不能正常运行的主要原因,有兴趣的朋友也可以看一下,没兴趣你就跳过吧, 
运行的时候,FC了,通过logcat可以看到,主要原因错误提示

 

 

1  java.lang.nosuchmethoderror ILocationManager.requestLocationUpdates

查了一下资料,发现 2.3的这个函数比2.2的多了两个参数,

代码

 

所以调用一个不存在的函数,导致了基FC,解决方法就是把里面改成新版的,拿出我的小手术刀apktool,解开了凯立德的apk,找到相应的地方,改过来,就OK了,
首写凯立德是用aidl的方式直接调用 android.location.ILocationManager;接口来实现的,如果用LocationManager来实现就没有这个问题了,就是因为 ILocationManager更改了调用接口才引发了错误!

反编译后可以看到,一个android/location文件夹,这里面就是调用aidl自动生成的文件, 这里的文件全部要换成最新的,有个简单的方法,就是在android 2.3的源代码里找到,location下的几个aidl文件,下载回来,新建一个android工程,把这几个文件,添加到里面,有个地方要注意,就是使用aidl文件,一定要放在相应的包目录下,比如,这几个文件就必须放在android/location这样的目录下,

编译这个空的工程,生成apk,把这个apk 用apktool 也反编译了,可以看到里面也有个android/location文件夹,把这下面的文件全部复制替换到凯立德的下面,这样凯立德调用的也是最新的接口了,然后,找到凯立德中调用 requestLocationUpdates的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
.method public  openGPS()I
     .locals 9
     .prologue
     const / 4  v8, 0x0
     const / 4  v7, - 0x1
     .line 1278
     iget- boolean  v0, p0, Lcld/navi/mainframe/MainActivity;->mUseGpsEmu:Z
     if -eqz v0, :cond_1
     .line 1280
     invoke-virtual {p0}, Lcld/navi/mainframe/MainActivity;->resumeGpsEmu()V
     :cond_0
     move v0, v8
     .line 1309
     :goto_0
     return  v0
     .line 1284
     :cond_1
     iget-object v0, p0, Lcld/navi/mainframe/MainActivity;->mLocationProvider:Ljava/lang/String;
     if -nez v0, :cond_0
     .line 1286
     iget-object v0, p0, Lcld/navi/mainframe/MainActivity;->mLocationManager:Landroid/location/LocationManager;
     iget-object v1, p0, Lcld/navi/mainframe/MainActivity;->mCriteria:Landroid/location/Criteria;
     const / 4  v2, 0x1
     invoke-virtual {v0, v1, v2}, Landroid/location/LocationManager;->getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;
     move-result-object v0
     iput-object v0, p0, Lcld/navi/mainframe/MainActivity;->mLocationProvider:Ljava/lang/String;
     .line 1288
     iget-object v0, p0, Lcld/navi/mainframe/MainActivity;->mLocationProvider:Ljava/lang/String;
     if -eqz v0, :cond_2
     .line 1292
     :try_start_0
     iget-object v0, p0, Lcld/navi/mainframe/MainActivity;->mILM:Landroid/location/ILocationManager;
     iget-object v1, p0, Lcld/navi/mainframe/MainActivity;->mGPSStatusListener:Lcld/navi/mainframe/MainActivity$NaviGPSStatusListener;
     invoke- interface  {v0, v1}, Landroid/location/ILocationManager;->addGpsStatusListener(Landroid/location/IGpsStatusListener;)Z
     .line 1293
     iget-object v0, p0, Lcld/navi/mainframe/MainActivity;->mILM:Landroid/location/ILocationManager;
     iget-object v1, p0, Lcld/navi/mainframe/MainActivity;->mLocationProvider:Ljava/lang/String;
     iget-wide v2, p0, Lcld/navi/mainframe/MainActivity;->mMinTime:J
     iget v4, p0, Lcld/navi/mainframe/MainActivity;->mMinDistance:F
     iget-object v5, p0, Lcld/navi/mainframe/MainActivity;->mLocationListener:Lcld/navi/mainframe/MainActivity$NaviLocationListener;
     invoke- interface /range {v0 .. v5}, Landroid/location/ILocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/ILocationListener;)V
#就是这里,就是因为这里调用了老的函数,所以引发了错误
     :try_end_0
     . catch  Landroid/os/RemoteException; {:try_start_0 .. :try_end_0} :catch_0
     move v0, v8
     .line 1294
     goto  :goto_0
     .line 1296
     :catch_0
     move-exception v0
     move-object v6, v0
     .line 1298
     .local v6, e:Landroid/os/RemoteException;
     invoke-virtual {p0}, Lcld/navi/mainframe/MainActivity;->closeGPS()I
     move v0, v7
     .line 1299
     goto  :goto_0
     .end local v6           #e:Landroid/os/RemoteException;
     :cond_2
     move v0, v7
     .line 1304
     goto  :goto_0
.end method

把它改成以下,添加了几个参数,把参数改成最新的,哪两个新加的参数,一个为null,一个为false,就可以了

代码

 

硕美科G927 7.1声道 游戏耳机 5.1头戴式 USB电脑耳麦 CF专用正品








    本文转自无心之柳.NET博客园博客,原文链接:http://www.cnblogs.com/9527/archive/2011/02/08/1950000.html,如需转载请自行联系原作者







http://www.ppmy.cn/news/212253.html

相关文章

相同型号设备(手机、耳机)同时插入电脑识别不同设备号问题

一 背景 相同型号耳机或手机等设备插入电脑识别成播放或录音设备;更换相同型号产品时,产品会重新枚举,播放设备号不唯一。如图 如果插入多个相同型号头戴式耳机,设备名称枚举时会多带出一个数字“2”或者其他。 二 解决方法 1 修…

cortex m3 开源_开源增强现实耳机,Steam的125M有效帐户等

cortex m3 开源 您好,开放游戏迷! 在本周的版本中,我们将了解Steam的1.25亿活跃帐户和Game Developers Conference,这是一个开源增强现实头戴设备,Linux游戏等。 开放游戏综述 2015年2月21日至28日当周 Steam拥有12…

测评 | 谷歌智能耳机Pixel Buds体验:耳朵里的语音助手

本文系网易智能工作室出品, 聚焦AI,读懂下一个大时代! 大型年度AI人物评选——2017中国AI英雄风云榜,自荐提名进行中! 奖项设置:技术创新人物TOP 10,商业创新人物TOP 10 表彰人物:华…

旧改快讯--星河操刀,龙华稳健工业园项目专规获批

龙华街道稳健工业园城市更新单元原列入《2019年深圳市龙华区城市更新单元计划第五批计划》,现已列入《2022年深圳市龙华区城市更新单元计划第三批计划》,现该更新单元规划已经深圳市城市规划委员会法定图则委员会2023年第16次会议审议并获原则通过&#…

未来互联网技术发展编年史,从阿帕网到完全可编程网络

目录 文章目录 目录编者按从冷战背景说起APRA 成立ARPANET 项目启动ARPANET 的诞生TCP/IP 协议与 Internet 的诞生HTTP 协议与 Web 世界的诞生REST 系统架构的诞生与 API 经济的腾飞Future Internet(未来互联网)思想萌芽OpenFlow 与 SDN 的诞生SDN 蛮荒混…

在windows上混合开发_什么是Windows 10上的混合现实,您应该购买耳机吗?

在windows上混合开发 Microsoft is building an ecosystem of “Mixed Reality” headsets from various PC manufacturers. Despite the misleading name, the first headsets you can buy today are really just virtual reality headsets, with no augmented reality featur…

Unity3D 开发 HTC Vive安装及如何连接电脑详细教程(全程图解)

HTC Vive安装及如何连接电脑详细教程: 在市场上的诸多VR产品当中,htc Vive无疑是体验最佳的设备之一,不过在享受高端硬件带来美妙沉浸感之前,必须要经过一段略微复杂的“手续”,以下是HTC Vive安装详细教程。 在安装之前首先要确…

基因xii_在Hack Week XII上运行创意

基因xii As I approach the main hall where Unity Hack Week XII is happening, I pass small breakout groups having intense discussions in French, Dutch, Russian, and in various accents ranging from the Queen’s English to a Texas drawl. Whatever the language …