How do I detect if the app uses React Native, given APK file?
Asked Answered
M

6

20

I downloaded APK file from Google Play, and want to know if the develop of the application have used React Native library. What's a quick and stable way to do that? (Would be even better if it's something I can potentially automate later - but such automation itself is out of scope of this question.)

Maegan answered 1/6, 2017 at 8:25 Comment(3)
why don't you just decompile the apk using dex2jar and look at the packages used inside the application.Plectron
What's the use case to know this detail?Heinous
@suman curiosityMaegan
C
21

I can offer you 2 solutions:

  • Solution 1

You can use dex2jar. When you open the generated jar file, you can check if it uses React Native if there is a folder /com/facebook/react/.

  • Solution 2

    1. Rename your application APK app.apk into app.zip
    2. Decompress your zip file
    3. Use dexdump from AndroidSDK$ANDROID_HOME/build-tools//dexdump:dexdump classes.dex`
    4. Search for com/facebook/react in the output of dexdump
Coequal answered 1/6, 2017 at 8:38 Comment(10)
and if the packages names are obfuscated?Longs
com.facebook.react won't be obfuscated (of proguarded correctly); otherwise it would not be able to be called/initialized.Sulfa
is it possible to decompile react native JS back into JS?Elexa
@Elexa What do you mean react native JS back into JS? JavaScript is JavaScript...whether you are using React Naive or not.Hussein
@Hussein I mean from an apk -> js source .. is that possible?Elexa
@Elexa No, you will never be able to get your original looking source files back. If you want further clarification it would be best to ask your own question.Hussein
@Hussein there's nothing wrong with comments. feel free not to answer.Elexa
✅ Tip: Android Studio can "Analyze APK", so you can do that option in the menu or just drag-and-drop the APK to it. Then click on the *.dex fileRevue
What if it has /com/facebook folder but no /react folder in it ?Pukka
@Elexa a minified version of the JS code resides in assets/index.android.bundle (first, decompress the package as described in the answer)Banville
H
7

The most simple solution

Open the APK in Android Studio and check the classes.dex-files(they can be more than one file). What you would look for is this, is it á :

  • React Native - do you find folder com\facebook\react ?
  • Flutter - do you find folder io\flutter ?
  • Xamarin - do you find folder com\xamarin\ ?

It could look like this in Android Studio

Android Studio Apk files

Haag answered 10/12, 2021 at 10:19 Comment(0)
D
6

The accepted solution certainly will get you the right answer, but it will be quite slow. It is what I did originally, and it was not fast enough for my needs since I was running this script across hundreds of APKs. I developed an alternate solution and executed it before the original made it through 5% of the APKs.

The reason I don't like checking for layouts having com_facebook in the name (the other pre-existing solution) is that it is entirely plausible for an app to be using another Facebook SDK that contains a layout file starting with that string. I don't know of any false positives, but it seemed reasonably likely that there would be some.

Instead I check for the presence of libreactnativejni.so which I have to imagine only gets used if React Native is being used. (I originally was looking for libyoga.so, but I had a few false positives, I think because there's a logging library by the same name.)

Specifically, this condition on a Mac in a bash script is what I'm using (I think it's portable, but have not tested):

if [ "$(unzip -l $apkfile | grep libreactnativejni.so | wc -l)" -gt "0" ]
then 
echo "Uses RN"
fi
Devault answered 2/10, 2019 at 23:49 Comment(3)
The only reason I don't want to change the accepted answer is because I don't have time to personally check it (as I did when I was asking original question and working on a project related to it).Maegan
What does libreactnativejni.so do? Some apps have those /com/facebook/react/ things but do not have this SO file...Bartolommeo
The shared object library is what powers a lot of the layout functionality for React Native Android (behind the scenes it actually uses libyoga.so, but other apps can include that as well without using RN). The com.facebook.react package has things beyond just RN stuff, though I haven't seen this case myself. Do you have an example app with that property?Devault
H
3

Not sure if this proven way.

Download the apk from the store to your PC, I used APK Downloader FireFox extension (if you don't have the app apk already).

Open apk with Zip software (I am on Linux so I used Ark). Now you can see parts of the project.

Go to res->layout and search for com_facebook..., In my case it was com_facebook_activity_layout.xml. If you have one layout with com_facebook in it then this apk was created with React.

Halve answered 12/3, 2019 at 15:24 Comment(0)
N
0

you can use this app https://play.google.com/store/apps/details?id=com.absinthe.libchecker or if you want check on pc then use https://github.com/EngineerDanny/apk-framework-detector this one.

Nutmeg answered 25/9, 2023 at 11:7 Comment(1)
LibChecker is awesome: go to Statistics Tab and filter for Native Libraries only, search for React or FlutterPeraea
B
-1

i found that the Online APK Analyzer" built by Roman Sisik is helpful online tool to know the frameworks used to build an android app by just uploading the apk file.

I've tested it with flutter and react-native apps and it gave me the correct answer, i also noticed that when no framework is shown it probably means that the app was built natively.

Barty answered 4/5, 2023 at 17:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.