Hayden. 发表于 2018-6-4 17:08

【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汉化,去广告反编译教程整理文档你值得拥有!









vLove0 发表于 2018-6-5 16:03

感谢分享,顺便弱弱的问句,我用AndroidKiller反编译这个apk,总会停在反编译Java源码这,如果关掉,重新打开,就看不到Java代码了。而且反编译后,立马编译回apk的时候也会报错。并不是语法错误。
反编译时的图如下:

编译的错误图如下:

是我的ShakaApktool版本太低了?

vLove0 发表于 2018-6-5 16:43

Hayden. 发表于 2018-6-5 16:10
对,太低了,升级到最新版就可以了

升到最新的apkTool,回编译没问题了。但是这个反编译源码还是一直停着。对了,楼主,你有没有去过搜书大师这款app的广告?AndroidKiller资源都反编译不了。反编译资源的时候报错了。

m0216 发表于 2018-6-4 17:21

这个不错感谢楼主的分享

吖骢 发表于 2018-6-4 17:35

压缩包里怎么又两个,哪个是啊?

yiqulanshan 发表于 2018-6-4 17:44

感谢作者无私奉献

飞蛾 发表于 2018-6-4 17:46

什么时候能有苹果的?

Hayden. 发表于 2018-6-4 17:54

吖骢 发表于 2018-6-4 17:35
压缩包里怎么又两个,哪个是啊?

带killer的是修改版,不带的是原版

yxjoe 发表于 2018-6-4 18:00

这个可以啊,感谢楼主分享

风青羽 发表于 2018-6-4 18:18

这个不错感谢楼主的分享

Taobi 发表于 2018-6-4 18:38

可以的,谢谢楼主分享

0531chuxin 发表于 2018-6-4 19:01

真心不错啊.....哈哈哈哈
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【APK精简】入门之笔趣阁免费小说APP【教程】