【APK精简】入门之笔趣阁免费小说APP【教程】
本帖最后由 Hayden. 于 2018-6-4 18:46 编辑本人平时会看些小说,而免费两字吸引了我,于是用了笔趣阁这款APK,它软件小巧功能强大,支持换源。
为了练习APK逆向精简,于是就选择了它做靶子了,对不住了!
这篇教程我不会介绍特别详细,这是在我其他教程基础上进行的,虽然称之为教程,但其实我只是小白,只是拿它当作笔记来用的,大佬不喜勿喷!
教程两字只是为了其他人便于搜索的到,和给向我一样入门的人以帮助,让他们少入坑仅此而已!
工具:Android Killer1.3.1
更改如下:
1、去启动广告(跟其他去启动广告略有不同)。
2、简单精简,去除无用的发现导航栏菜单。
3、去除不登录只能存放10本书到书架的限制,可免登录使用。
4、去除危险无用权限
5、去除危险及广告服务
首先是第一条去启动广告:
和之前的教程差不多,把WelComeActivity活动下的程序入口代码放到MainActivity活动下。
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
PS:一定要剪切,否则会出现问题。
到这里运行你会发现广告并没有去除,进入MainActivity活动会发现它下面仍会开启WelComeActivity活动,这是个坑,进去把他删除就可以了。
protected void onCreate(@Nullable Bundle paramBundle)
{
super.onCreate(paramBundle);
a();
setContentView(2130968617);
if (!com.biquge.ebook.app.ad.i.a().a)
{
startActivity(new Intent(this, WelComeActivity.class));
overridePendingTransition(0, 0);
finish();
}
e();
a(paramBundle);
d();
j();
c();
}
删除smali代码就OK了:
第二条精简去”发现“导航菜单选项:
本次使用的是隐藏,直接删减比较麻烦容易出错。
搜索“发现”得到”main_tab_book_discover“,继续搜索定位到”fragment_discover_title_txt“,然后找到activity_main.xml文件。
这个就是底部导航栏布局文件,里面有四个Button。
把他先面的属性设置成0px宽度就会隐藏了android:layout_weight="0"
第三条去除书架书本限制:
通过添加书籍达到上限后的提示定位到strings.xml里的字符串
<string name="login_add_shelf_book_max">书架已超过最大限制%1$s本,请删除一些不需要的书籍,再继续添加新书</string>
搜索login_add_shelf_book_max定位到
.method public a(Landroid/content/Context;Z)Z
.locals 8
.prologue
const/16 v7, 0x64
const/16 v5, 0xa #十进制是10,就是10本书的最大上限
const/4 v6, 0x0
const/4 v0, 0x1
const/4 v1, 0x0
.line 171
invoke-static {}, Lcom/biquge/ebook/app/b/h;->a()Lcom/biquge/ebook/app/b/h;
move-result-object v2
invoke-virtual {v2}, Lcom/biquge/ebook/app/b/h;->b()Z
move-result v2
if-nez v2, :cond_0
.line 172
invoke-virtual {p0}, Lcom/biquge/ebook/app/d/a/a;->a()Ljava/util/List;
move-result-object v2
invoke-interface {v2}, Ljava/util/List;->size()I
move-result v2
#if-lt v2, v5, :cond_2 #如果小于10本书跳转到cond_2正常条件,继续添加书籍,否则显示限制提示。所以删除此条件就可达到去出现之目的。
goto :cond_2
.line 173
new-instance v2, Lcom/biquge/ebook/app/widget/DialogTips;
invoke-direct {v2, p1}, Lcom/biquge/ebook/app/widget/DialogTips;-><init>(Landroid/content/Context;)V
.line 174
const v3, 0x7f07015e#上限错误提示
new-array v4, v0, [Ljava/lang/Object;
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
aput-object v5, v4, v1
invoke-static {v6, v3, v4}, Lcom/biquge/ebook/app/utils/s;->a(Landroid/content/Context;I[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Lcom/biquge/ebook/app/widget/DialogTips;->b(Ljava/lang/String;)V
.line 175
const v3, 0x7f070111
invoke-static {v6, v3}, Lcom/biquge/ebook/app/utils/s;->a(Landroid/content/Context;I)Ljava/lang/String;
move-result-object v3
new-instance v4, Lcom/biquge/ebook/app/d/a/a$1;
invoke-direct {v4, p0, p1, p2}, Lcom/biquge/ebook/app/d/a/a$1;-><init>(Lcom/biquge/ebook/app/d/a/a;Landroid/content/Context;Z)V
invoke-virtual {v2, v3, v4}, Lcom/biquge/ebook/app/widget/DialogTips;->a(Ljava/lang/String;Lcom/biquge/ebook/app/widget/DialogTips$b;)V
.line 189
invoke-virtual {v2, v6}, Lcom/biquge/ebook/app/widget/DialogTips;->a(Lcom/biquge/ebook/app/widget/DialogTips$a;)V
.line 190
invoke-virtual {v2, v1}, Lcom/biquge/ebook/app/widget/DialogTips;->setCanceledOnTouchOutside(Z)V
.line 191
invoke-virtual {v2}, Lcom/biquge/ebook/app/widget/DialogTips;->show()V
.line 215
:goto_0
return v0
.line 195
:cond_0
invoke-virtual {p0}, Lcom/biquge/ebook/app/d/a/a;->a()Ljava/util/List;
move-result-object v2
invoke-interface {v2}, Ljava/util/List;->size()I
move-result v2
if-lt v2, v7, :cond_2
.line 196
new-instance v2, Lcom/biquge/ebook/app/widget/DialogTips;
invoke-direct {v2, p1}, Lcom/biquge/ebook/app/widget/DialogTips;-><init>(Landroid/content/Context;)V
.line 197
const v3, 0x7f07010e
new-array v4, v0, [Ljava/lang/Object;
invoke-static {v7}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
aput-object v5, v4, v1
invoke-static {v6, v3, v4}, Lcom/biquge/ebook/app/utils/s;->a(Landroid/content/Context;I[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Lcom/biquge/ebook/app/widget/DialogTips;->b(Ljava/lang/String;)V
.line 198
invoke-virtual {v2, v1}, Lcom/biquge/ebook/app/widget/DialogTips;->setCanceledOnTouchOutside(Z)V
.line 199
if-eqz p2, :cond_1
.line 200
new-instance v1, Lcom/biquge/ebook/app/d/a/a$2;
invoke-direct {v1, p0, p1}, Lcom/biquge/ebook/app/d/a/a$2;-><init>(Lcom/biquge/ebook/app/d/a/a;Landroid/content/Context;)V
invoke-virtual {v2, v1}, Lcom/biquge/ebook/app/widget/DialogTips;->a(Lcom/biquge/ebook/app/widget/DialogTips$b;)V
.line 211
:cond_1
invoke-virtual {v2}, Lcom/biquge/ebook/app/widget/DialogTips;->show()V
goto :goto_0
:cond_2
move v0, v1
.line 215
goto :goto_0
.end method
第四条去除权限:
保留如下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.gudianbiquge.ebook.app"/>
有兴趣可以试着继续去除其他无用权限!
第五条去除推送,通知栏广告等烦人无用服务:
<receiver android:name="com.biquge.ebook.app.receiver.MyPushMessageReceiver">
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.MESSAGE"/>
<action android:name="com.baidu.android.pushservice.action.RECEIVE"/>
<action android:name="com.baidu.android.pushservice.action.notification.CLICK"/>
</intent-filter>
</receiver>
<receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=":bdservice_v1">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="com.baidu.android.pushservice.action.notification.SHOW"/>
<action android:name="com.baidu.android.pushservice.action.media.CLICK"/>
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<action android:name="android.intent.action.USER_PRESENT"/>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
<receiver android:name="com.baidu.android.pushservice.RegistrationReceiver" android:process=":bdservice_v1">
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.METHOD"/>
<action android:name="com.baidu.android.pushservice.action.BIND_SYNC"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
<service android:exported="true" android:name="com.baidu.android.pushservice.PushService" android:process=":bdservice_v1">
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE"/>
</intent-filter>
</service>
<service android:exported="true" android:name="com.baidu.android.pushservice.CommandService"/>
<provider android:authorities="com.gudianbiquge.ebook.app.bdpush" android:exported="true" android:name="com.baidu.android.pushservice.PushInfoProvider" android:protectionLevel="signature" android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.gudianbiquge.ebook.app"/>
最后来张前后对比图:
下面是修改前后APK,仅用于学习使用,请24小时内自动删除:
链接:https://pan.baidu.com/s/1FIENSRMoKLBonuyfePymzw 密码:eb9v
欢迎回复点评,观看往日教程:
【处女作】【内购】【去广告】【教程】史上最干净的《登山赛车》!
【去签名验证】【去广告】【禁更新】教程之影音先锋纯净版
APK汉化,去广告反编译教程整理文档你值得拥有!
感谢分享,顺便弱弱的问句,我用AndroidKiller反编译这个apk,总会停在反编译Java源码这,如果关掉,重新打开,就看不到Java代码了。而且反编译后,立马编译回apk的时候也会报错。并不是语法错误。
反编译时的图如下:
编译的错误图如下:
是我的ShakaApktool版本太低了? Hayden. 发表于 2018-6-5 16:10
对,太低了,升级到最新版就可以了
升到最新的apkTool,回编译没问题了。但是这个反编译源码还是一直停着。对了,楼主,你有没有去过搜书大师这款app的广告?AndroidKiller资源都反编译不了。反编译资源的时候报错了。 这个不错感谢楼主的分享 压缩包里怎么又两个,哪个是啊? 感谢作者无私奉献 什么时候能有苹果的? 吖骢 发表于 2018-6-4 17:35
压缩包里怎么又两个,哪个是啊?
带killer的是修改版,不带的是原版 这个可以啊,感谢楼主分享 这个不错感谢楼主的分享 可以的,谢谢楼主分享 真心不错啊.....哈哈哈哈