Skip to content

kairi003/NarouReaderMod

Repository files navigation

NarouReaderMod

なろうリーダで100話以降の目次を取得するための改造パッチ (ref: NarouReaderMod-source)

開発手順: Wiki, 質問/意見 Discussions, 不具合報告/機能提案: Issues

注意

  • v0.2.1: 現在低負荷更新を行うと目次の章が正常に反映されなくなる不具合が報告されています
    • v0.2.2 で暫定的に対処しましたが要検証です
    • 破損した目次の章表示は強制更新で一時的に直ります
  • 本パッチは非公式のものであり、なろうリーダの開発者とは無関係です。不具合があっても本家開発者に問い合わせないでください。
  • 本パッチを利用することでアプリが正常に動作しなくなる可能性があります。自己責任でご利用ください。
  • 100話ごとで目次を取得するため、話数の多い小説の更新確認は遅くなります。
    • 一定以上更新に時間がかかる場合は目次の取得が中断されることがあります。その場合は登録小説を更新除外設定するなどで対処してください。
  • ver0.2.0以降: 設定の「低負荷更新」を有効にすることで、現在取得している話数が含まれる目次ページ以降のみを取得するようになります。
    • 実験的機能です。実用に耐えない場合は無効にしてください。
    • これにより更新確認が低負荷化、高速化されます。
    • 取得済みの目次ページは改稿等を検知できません。
    • 部分削除や割込み投稿で目次がずれると正常に更新されないことがあります。
    • 強制更新 (または小説キャッシュ削除→強制更新) を行うと全ての目次ページを取得します。
  • 本パッチを適用したなろうリーダはGoogle Playにてアップデートされなくなります。
    • アップデートを行う場合はアプリをアンインストールし、公式のものを再インストールしてください。
  • ver0.1.1 以降: オリジナルとは別のアプリとしてインストールされます。
    • オリジナルとはフルバックアップ/フルリストアによってデータを共有できます。
  • APKPureは非公式のapk配布サイトですが、署名が正規のものであれば一般的には安全です。
    • あくまで自己責任なので不安な場合は複数apkを抽出しソースパッチしてください。

なろうリーダ(オリジナル)の署名ハッシュ

SHA1: AD:45:B8:7B:B2:49:E6:EE:51:87:37:CD:23:BC:82:5F:8F:BC:C9:1B
SHA256: FD:F3:16:B3:60:09:7A:63:C9:5E:7A:13:A9:36:B0:38:9E:47:5D:07:27:23:3A:F4:5D:93:90:59:31:49:B0:15

なろうリーダ1.35.6(APKPure)のファイルハッシュ

MD5: 625ac2c139489a395b81cc2f84772bc8
SHA1: e84d872c3c7f026543ff610d343d0a9353b02655
SHA256: 5fc140ef920c1ffc91b8ad5411b43e3fe80e647db045326ab98e7ec7af2fc635

バイナリパッチ

  • ツールの用意や署名が面倒な場合はバイナリパッチを利用してください。
  • できればapktoolを使ってソースパッチを適用することを推奨します。
  • バイナリパッチはAPKPureのなろうリーダv1.35.6の単一apkにのみ適用可能です。

必要なもの

適用方法

ブラウザでの適用

  1. https://kairi003.github.io/bsdiff-wasm/ にアクセス
  2. bspatchOldFile になろうリーダのapkを、PatchFilenarou-mod.bsdiff を選択
  3. run ボタンを押す

コマンドでの適用

  1. なろうリーダのapkをoriginal.apkという名前でnarou-mod.bsdiffと同じディレクトリに配置
    • windowsの場合はbspatch.exeも同じディレクトリに配置
  2. コマンドラインやターミナルを開き以下のコマンドでnarou-mod.bsdiffを適用
bspatch original.apk narou-mod.apk narou-mod.bsdiff
  1. 署名ハッシュはリリースページに記載されています。改竄されていないことを確認してください。
keytool -printcert -jarfile narou-mod.apk

ソースパッチ

パッチ適用動作環境

  • Linux(WSL含む)推奨, Mac未検証

必要なツール

Ubuntuでのインストール例

sudo apt update
sudo apt install openjdk-18-jdk-headless apksigner zipalign imagemagick
sudo ./install-apktool.sh # apktoolのインストール

使い方

署名やビルドが面倒な場合はバイナリパッチを利用してください。

  1. なろうリーダのapkを入手
    • デバイス中のapkはsplit apksになっているため、APKPureなどのサイトからダウンロード推奨
    • セキュリティ的に不安な場合はbase.apkと同じディレクトリの全てのapkファイルをadbやSAIで抽出し、単一apkの代わりにbase.apkにパッチを当てる
      • この場合 adb install-multiple でインストール可能だが全てのapkに同一の署名が必要
  2. なろうリーダのapkをoriginal.apkという名前でrun.shと同じディレクトリに配置
  3. 後述のコマンドでキーストアを作成
  4. run.sh を実行
    • apktoolによるデコード、パッチの適用、ビルド、zipalign、署名を行う
  5. narou-mod.apk が生成されるので、これを端末にインストール
    • 自己署名のため、インストール時にセキュリティ警告が表示される

キーストアの作成

以下のコマンドでキーストアを作成する。 所在地などはデフォルト(Unkown)で問題ない。 パスワードは署名時に必要。

keytool -genkeypair -v -keystore .keystore -alias narou-mod -keyalg RSA -keysize 2048 -validity 100000

パッチによる変更内容

rename.sh

  • パッケージ名を変更 (com.tscsoft.naroureader -> com.tscsoft.naroureader_mod)
  • アプリ名を変更 (なろうリーダ -> なろうリーダ[MOD])
  • バージョン名を変更 (+{MOD version})を追加
  • アイコン色を変更

com.tscsoft.naroureader_mod_mod.utils.Modding.smali

  • 目次ページを全て読み込むための関数 patchNovelHtml を追加

fix-update-100.diff

  • com.tscsoft.naroureader_mod_mod.utils.UpdateManagerpatchNovelHtml を呼び出すように変更

min-index-update.diff

  • 各リソース定義に min_index_update 設定値関連を追加
  • ListBeanworkMode, prevAllNo フィールド及びsetter/getterを追加
    • 上記フィールドの処理をListBeanUpdateManagerに追加

org.jsoup

  • 最適化でメソッドが削除されているためminifyを無効化したsmaliに差し替え

okhttp3

  • SSL通信でクラッシュする不具合が修正されているためバージョンアップ

fix-html-change.diff

  • 「小説家になろう」のHTML構造変更に対応
.index_box -> .p-eplist
.subtitle a -> a.p-eplist__subtitle
.long_update -> .p-eplist__update
.novelview_pager-next -> .c-pager__item--next
.novelview_pager-last -> .c-pager__item--last
chapter_title -> p-eplist__chapter-title
novel_sublist2 -> p-eplist__sublist

"<div id=\"novel_a\" class=\"novel_view\">\n([\\s\\S]+?)</div>" -> "<div class=\"js-novel-text p-novel__text p-novel__text--afterword\">\n([\\s\\S]+?)</div>"
"<div id=\"novel_p\" class=\"novel_view\">\n([\\s\\S]+?)</div>" -> "<div class=\"js-novel-text p-novel__text p-novel__text--preface\">\n([\\s\\S]+?)</div>"
"<p class=\"novel_subtitle\">(.+?)</p>" -> "<h1 class=\"p-novel__title p-novel__title--rensai\">(.+?)</h1>"
"<div id=\"novel_honbun\" class=\"novel_view\">\n([\\s\\S]+?)</div>" -> "<div class=\"js-novel-text p-novel__text\">\n([\\s\\S]+?)</div>"

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages