本帖最后由 古今第一 于 2014-7-18 19:26 编辑
功能简介 豆瓣电台是基于算法推荐的网络音乐播放产品。它基于豆瓣庞大的用户数据,通过判断用户在播放时的操作行为,为用户推荐他可能感兴趣的曲目。 开发商:豆瓣网
准备: 离线超过两个兆赫的时候会提示 “添加离线兆赫失败,超过了离线兆赫数限制”
直接IDE载人搜索 关键字” 离线兆赫失败” 找到了字符串的定义段
<stringname="add_offline_channel_fail">添加离线兆赫失败,超过了离线兆赫数限制</string>
可以看到字符串的内部名是add_offline_channel_fail 所以继续搜索add_offline_channel_fail
到了一个定义文件 <public type="string" name="add_offline_channel_fail"id="0x7f0c0035"/>,可以看到定义id 0x7f0c0035 继续搜索0x7f0c0035 到了代码调用处
往上翻可以看到一个函数,addNewOfflineChannel,什么东西?用脚趾头猜都知道,这就是添加离线兆赫的函数名,所以接着搜索addNewOfflineChannel找到了函数的定义段
[Java] 纯文本查看 复制代码 .method public addNewOfflineChannel(Lcom/douban/fm/model/Channels$Channel;)Z
.locals 3
.parameter "channel"
.prologue
const/4 v0, 0x0
.line 2783
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mQualityManager:Lcom/douban/radio/controller/QualityManager;
invoke-virtual {v1}, Lcom/douban/radio/controller/QualityManager;->isPro()Ljava/lang/Boolean;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/Boolean;->booleanValue()Z
move-result v1
iput-boolean v1, p0, Lcom/douban/radio/offline/OfflineManager;->mUserPro:Z
.line 2785
iget-boolean v1, p0, Lcom/douban/radio/offline/OfflineManager;->mUserPro:Z
if-eqz v1, :cond_1
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v1
const/4 v2, 0x4
if-lt v1, v2, :cond_1
.line 2801
:cond_0
:goto_0
return v0
.line 2789
:cond_1
iget-boolean v1, p0, Lcom/douban/radio/offline/OfflineManager;->mUserPro:Z
if-nez v1, :cond_2
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v1
const/4 v2, 0x2
if-ge v1, v2, :cond_0
.line 2793
:cond_2
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
iget v2, p1, Lcom/douban/fm/model/Channels$Channel;->id:I
invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/util/LinkedList;->contains(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_0
.line 2795
iget-object v0, p0, Lcom/douban/radio/offline/OfflineManager;->mDB:Lcom/douban/radio/offline/OfflineDB;
invoke-virtual {v0, p1}, Lcom/douban/radio/offline/OfflineDB;->addNewChannel(Lcom/douban/fm/model/Channels$Channel;)V
.line 2796
iget-object v0, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
iget v1, p1, Lcom/douban/fm/model/Channels$Channel;->id:I
invoke-static {v1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 2798
const/4 v0, 0x1
goto :goto_0
.end method
一大堆的乱哄哄的代码。。。反正我是没能读懂几个。。。转到Java看吧,
第二个条件判断出现了0x2的比较,肯定就是离线兆赫的限制了,而在DALVIK代码中也可以找到与之对应的代码 const/4 v2, 0x2 if-ge v1, v2, :cond_0 所以我们可以直接把0x2改为我们想要的数值来突破限制,也可以直接把这段代码删除。 修改后效果
原版豆瓣FM下载:http://pan.baidu.com/s/1pJAw0P1 豆瓣FM无离线限制版:http://www.52pojie.cn/thread-275914-1-1.html
|