web-dev-qa-db-ja.com

アプリがReact Native、与えられたAPKファイルを使用しているかどうかを検出するにはどうすればよいですか?

Google PlayからAPKファイルをダウンロードしましたが、アプリケーションの開発でReactネイティブライブラリが使用されているかどうかを知りたいです。これを行うための迅速で安定した方法は何ですか?(それがあればさらに良いでしょう)後で自動化できる可能性があるものですが、そのような自動化自体はこの質問の範囲外です。)

10
Max Yankov

私はあなたに2つの解決策を提供することができます:

  • ソリューション1

dex2jar を使用できます。生成されたjarファイルを開くと、フォルダー/com/facebook/react/がある場合にReact Native)を使用しているかどうかを確認できます。

  • ソリューション2

    1. アプリケーションの名前をAPKapp.apkからapp.Zipに変更します
    2. Zipファイルを解凍します
    3. Android dexdump $ Android_HOME/build-tools // dexdump:dexdumpclasses.dex`のSDKを使用します
    4. Dexdumpの出力でcom/facebook/reactを検索します
14
OlivierM

受け入れられた解決策は確かにあなたに正しい答えを得るでしょう、しかしそれはかなり遅いでしょう。これは私が最初に行ったことであり、このスクリプトを数百のAPKで実行していたため、ニーズに対して十分な速度ではありませんでした。私は代替ソリューションを開発し、オリジナルがAPKの5%を通過する前にそれを実行しました。

名前にcom_facebookが含まれているレイアウト(他の既存のソリューション)をチェックするのが好きではない理由は、アプリがその文字列で始まるレイアウトファイルを含む別のFacebookSDKを使用している可能性が高いためです。誤検知についてはわかりませんが、誤検知が発生する可能性はかなり高いと思われます。

代わりに、libreactnativejni.soの存在を確認します。これは、React Nativeが使用されている場合にのみ使用されると想像する必要があります(元々libyoga.soを探していましたが、同じ名前のロギングライブラリがあるため、誤検知はほとんどないと思います。)

具体的には、bashスクリプトのMacでのこの状態は、私が使用しているものです(移植可能だと思いますが、テストはしていません)。

if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then 
echo "Uses RN"
fi
2
jack

これが証明された方法かどうかはわかりません。

ストアからPCにapkをダウンロードします。私は APK Downloader FireFox拡張機能を使用しました(アプリapkをまだお持ちでない場合)。

Zipソフトウェアでapkを開きます(私はLinuxを使用しているので、Arkを使用しました)。これで、プロジェクトの一部を見ることができます。

res->layoutに移動し、com_facebook...を検索します。私の場合はcom_facebook_activity_layout.xmlでした。 com_facebookを含むレイアウトが1つある場合、このapkはReactで作成されました。

1
guy