{"id":13989196,"url":"https://github.com/CalebFenton/apkfile","last_synced_at":"2025-07-22T10:31:30.615Z","repository":{"id":46748577,"uuid":"93215849","full_name":"CalebFenton/apkfile","owner":"CalebFenton","description":"Android app analysis and feature extraction library","archived":false,"fork":false,"pushed_at":"2020-09-30T22:44:47.000Z","size":292,"stargazers_count":223,"open_issues_count":1,"forks_count":51,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-08T00:09:26.379Z","etag":null,"topics":["android","feature-extraction","feature-extractor","machine-learning","malware-analysis","malware-detection","malware-research","reverse-engineer-apk","reverse-engineering"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CalebFenton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-03T01:35:46.000Z","updated_at":"2025-04-23T14:44:34.000Z","dependencies_parsed_at":"2022-09-12T22:40:21.346Z","dependency_job_id":null,"html_url":"https://github.com/CalebFenton/apkfile","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/CalebFenton/apkfile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalebFenton%2Fapkfile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalebFenton%2Fapkfile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalebFenton%2Fapkfile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalebFenton%2Fapkfile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CalebFenton","download_url":"https://codeload.github.com/CalebFenton/apkfile/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalebFenton%2Fapkfile/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266475112,"owners_count":23934884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","feature-extraction","feature-extractor","machine-learning","malware-analysis","malware-detection","malware-research","reverse-engineer-apk","reverse-engineering"],"created_at":"2024-08-09T13:01:33.370Z","updated_at":"2025-07-22T10:31:30.047Z","avatar_url":"https://github.com/CalebFenton.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# apkfile\n\nApkFile is a library which creates a representation of an APK composed of Java objects which can be easily inspected for analysis or serialized into JSON. The goal of the library is to provide a robust way to inspect hostile malware samples, but it's general purpose enough to be used for other stuff too.\n\nThis library and [APKiD](https://github.com/rednaga/APKiD) provide the machine learning feature extraction for [Judge](http://judge.rednaga.io/), an Android malware detection engine. \n\n## Usage\n\nThe main object is `ApkFile` and it extends `java.io.File`:\n\n```java\nApkFile apkFile = new ApkFileFactory().build('ApiDemos.apk');\nAndroidManifest androidManifest = apkFile.getAndroidManifest();\nString packageName = androidManifest.getPackageName(); // com.example.android.apis\n```\n\n`ApkFile` provides objects for:\n\n* Android manifest\n* Resources via modified \u0026 hardened [ArscBlamer](https://github.com/google/android-arscblamer)\n* Signing certificate\n* DEX files via [dexlib2](https://github.com/JesusFreke/smali/tree/master/dexlib2)\n    * Classes, methods, etc.\n* APK entries\n\n## Serializing to JSON\n\nBelow is an example of how to stream an `ApkFile` to JSON:\n\n```java\nApkFile apkFile = new ApkFileFactory().build(\"ignore/DroidSwarm-1.0.1.apk\");\n// ApkFile uses Trove library for speed. This needs some type adapters to\n// properly convert into JSON.\nGson gson = Utils.getTroveAwareGsonBuilder()\n        .disableHtmlEscaping()\n        .serializeSpecialFloatingPointValues()\n        .setExclusionStrategies(new JarFileExclusionStrategy())\n        .setPrettyPrinting()\n        .create();\n\n// Since the JSON is usually very large and takes up a lot of memory, stream it out.\nWriter writer = new OutputStreamWriter(System.out);\ngson.toJson(apkFile, writer);\nwriter.close();\napkFile.close();\n```\n\nBelow is the highly abbreviated output from the code above. A full version can be found [here](doc/droidswarm.json).\n\n```json\n{\n  \"androidManifest\": {\n    \"application\": {\n      \"activities\": [\n        {\n          \"allowEmbedded\": false,\n          \"allowTaskReparenting\": false,\n          \"alwaysRetainTaskState\": false,\n          \"autoRemoveFromRecents\": false,\n          \"banner\": \"\",\n          \"clearTaskOnLaunch\": false,\n          \"configChanges\": 0,\n          \"documentLaunchMode\": 0,\n          \"excludeFromRecents\": false,\n          \"finishOnTaskLaunch\": false,\n          \"hardwareAccelerated\": false,\n          \"launchMode\": 0,\n          \"maxRecents\": 16,\n          \"multiprocess\": false,\n          \"noHistory\": false,\n          \"parentActivityName\": \"\",\n          \"persistableMode\": 0,\n          \"relinquishTaskIdentity\": false,\n          \"resizeableActivity\": false,\n          \"screenOrientation\": 0,\n          \"showForAllUsers\": false,\n          \"stateNotNeeded\": false,\n          \"supportsPictureInPicture\": false,\n          \"taskAffinity\": \"\",\n          \"theme\": \"\",\n          \"uiOptions\": 0,\n          \"windowSoftInputMode\": 0,\n          \"intentFilters\": [\n            {\n              \"actions\": [\n                \"android.intent.action.MAIN\"\n              ],\n              \"categories\": [\n                \"android.intent.category.LAUNCHER\"\n              ],\n              \"data\": [],\n              \"icon\": \"\",\n              \"label\": \"\",\n              \"priority\": 0\n            }\n          ],\n          \"metaData\": [],\n          \"directBootAware\": false,\n          \"enabled\": true,\n          \"exported\": false,\n          \"icon\": \"\",\n          \"label\": \"DroidSwarm\",\n          \"name\": \"com.soong.droidswarm.Main\",\n          \"permission\": \"\",\n          \"process\": \"\"\n        },\n        // ** SNIP **\n      ],\n      \"activityAliases\": [],\n      \"allowTaskReparenting\": false,\n      \"allowBackup\": true,\n      \"backupAgent\": \"\",\n      \"backupInForeground\": false,\n      \"banner\": \"\",\n      \"debuggable\": true,\n      \"description\": \"\",\n      \"directBootAware\": false,\n      \"enabled\": true,\n      \"extractNativeLibs\": true,\n      \"fullBackupContent\": \"\",\n      \"fullBackupOnly\": false,\n      \"hardwareAccelerated\": true,\n      \"hasCode\": true,\n      \"icon\": \"res/drawable-mdpi/ic_launcher.png\",\n      \"isGame\": false,\n      \"killAfterRestore\": true,\n      \"largeHeap\": false,\n      \"label\": \"DroidSwarm\",\n      \"logo\": \"\",\n      \"manageSpaceActivity\": \"\",\n      \"name\": \"\",\n      \"networkSecurityConfig\": \"\",\n      \"permission\": \"\",\n      \"persistent\": false,\n      \"process\": \"\",\n      \"providers\": [],\n      \"receivers\": [],\n      \"restoreAnyVersion\": false,\n      \"requiredAccountType\": \"\",\n      \"resizableActivity\": false,\n      \"supportsRtl\": false,\n      \"services\": [\n        {\n          \"isolatedProcess\": false,\n          \"intentFilters\": [],\n          \"metaData\": [],\n          \"directBootAware\": false,\n          \"enabled\": true,\n          \"exported\": false,\n          \"icon\": \"\",\n          \"label\": \"\",\n          \"name\": \"com.soong.droidswarm.SwarmService\",\n          \"permission\": \"\",\n          \"process\": \"\"\n        }\n      ],\n      \"taskAffinity\": \"\",\n      \"theme\": \"\",\n      \"uiOptions\": 0,\n      \"usesCleartextTraffic\": true,\n      \"vmSafeMode\": false,\n      \"usesLibraries\": []\n    },\n    \"compatibleScreens\": [],\n    \"hasResources\": true,\n    \"installLocation\": 0,\n    \"instrumentations\": [],\n    \"maxSdkVersion\": 0,\n    \"minSdkVersion\": 7,\n    \"packageName\": \"com.soong.droidswarm\",\n    \"permissionGroups\": [],\n    \"permissionTrees\": [],\n    \"permissions\": [],\n    \"platformBuildVersionCode\": -1,\n    \"platformBuildVersionName\": \"\",\n    \"sharedUserId\": \"\",\n    \"sharedUserLabel\": \"\",\n    \"supportsGlTextures\": [],\n    \"targetSdkVersion\": 0,\n    \"usesConfigurations\": [],\n    \"usesFeatures\": [],\n    \"usesPermissions\": [\n      \"android.permission.INTERNET\",\n      \"android.permission.WRITE_EXTERNAL_STORAGE\",\n      \"android.permission.ACCESS_NETWORK_STATE\",\n      \"android.permission.CHANGE_WIFI_STATE\"\n    ],\n    \"versionCode\": 5,\n    \"versionName\": \"0.9.2\"\n  },\n  \"certificate\": {\n    \"allRdns\": [\n      {\n        \"issuerRdns\": {\n          \"C\": \"US\",\n          \"CN\": \"Android Debug\",\n          \"O\": \"Android\"\n        },\n        \"subjectRdns\": {\n          \"C\": \"US\",\n          \"CN\": \"Android Debug\",\n          \"O\": \"Android\"\n        }\n      }\n    ]\n  },\n  \"entryNameToDex\": {\n    \"classes.dex\": {\n      \"apiCounts\": {\n        \"Landroid/text/Editable;-\u003etoString()Ljava/lang/String;\": 8,\n        \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003e\u003cinit\u003e(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V\": 1,\n        \"Landroid/content/pm/PackageManager;-\u003egetPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;\": 2,\n        \"Ljava/lang/Object;-\u003etoString()Ljava/lang/String;\": 1,\n        \"Ljava/lang/Long;-\u003evalueOf(J)Ljava/lang/Long;\": 2,\n        \"Landroid/widget/CheckBox;-\u003eisChecked()Z\": 1,\n        \"Landroid/widget/ListView;-\u003esetAdapter(Landroid/widget/ListAdapter;)V\": 2,\n        \"Ljava/lang/CharSequence;-\u003etoString()Ljava/lang/String;\": 1,\n        \"Ljava/util/Iterator;-\u003ehasNext()Z\": 9,\n        \"Ljava/lang/String;-\u003etoLowerCase()Ljava/lang/String;\": 1,\n        \"Landroid/widget/SeekBar;-\u003egetMax()I\": 1,\n        \"Landroid/app/AlertDialog;-\u003esetMessage(Ljava/lang/CharSequence;)V\": 1,\n        // ** SNIP **\n      },\n      \"classAccessorCounts\": {\n        \"interface\": 2,\n        \"final\": 7,\n        \"protected\": 0,\n        \"private\": 0,\n        \"synchronized\": 0,\n        \"abstract\": 2,\n        \"native\": 0,\n        \"volatile\": 0,\n        \"transient\": 0,\n        \"public\": 22,\n        \"static\": 0,\n        \"strict\": 0\n      },\n      \"classPathToClass\": {\n        // * SNIP **\n        \"Lcom/soong/droidswarm/SwarmMonitor;\": {\n          \"apiCounts\": {\n            \"Ljava/lang/Thread;-\u003esleep(J)V\": 1,\n            \"Ljava/lang/Long;-\u003evalueOf(J)Ljava/lang/Long;\": 2,\n            \"Ljava/io/PrintStream;-\u003eprintln(Ljava/lang/String;)V\": 1,\n            \"Ljava/util/ArrayList;-\u003eget(I)Ljava/lang/Object;\": 1,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetMaximumPoolSize()I\": 1,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003eexecute(Ljava/lang/Runnable;)V\": 1,\n            \"Ljava/lang/Integer;-\u003evalueOf(I)Ljava/lang/Integer;\": 5,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetActiveCount()I\": 1,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetTaskCount()J\": 1,\n            \"Ljava/lang/Object;-\u003e\u003cinit\u003e()V\": 1,\n            \"Ljava/lang/String;-\u003eformat(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;\": 1,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetPoolSize()I\": 2,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003eisShutdown()Z\": 3,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetCorePoolSize()I\": 1,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetCompletedTaskCount()J\": 1,\n            \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003eisTerminated()Z\": 1\n          },\n          \"classAccessors\": {\n            \"interface\": 0,\n            \"final\": 0,\n            \"protected\": 0,\n            \"private\": 0,\n            \"synchronized\": 0,\n            \"abstract\": 0,\n            \"native\": 0,\n            \"volatile\": 0,\n            \"transient\": 0,\n            \"public\": 1,\n            \"static\": 0,\n            \"strict\": 0\n          },\n          \"fieldReferenceCounts\": {\n            \"Ljava/lang/System;-\u003eout:Ljava/io/PrintStream;\": 1\n          },\n          \"methodAccessorCounts\": {\n            \"interface\": 0,\n            \"final\": 0,\n            \"protected\": 0,\n            \"private\": 0,\n            \"synchronized\": 0,\n            \"abstract\": 0,\n            \"native\": 0,\n            \"volatile\": 0,\n            \"transient\": 0,\n            \"public\": 2,\n            \"static\": 0,\n            \"strict\": 0\n          },\n          \"methodSignatureToMethod\": {\n            \"run()V\": {\n              \"apiCounts\": {\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetActiveCount()I\": 1,\n                \"Ljava/lang/Thread;-\u003esleep(J)V\": 1,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003eexecute(Ljava/lang/Runnable;)V\": 1,\n                \"Ljava/lang/Long;-\u003evalueOf(J)Ljava/lang/Long;\": 2,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetCompletedTaskCount()J\": 1,\n                \"Ljava/util/ArrayList;-\u003eget(I)Ljava/lang/Object;\": 1,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetMaximumPoolSize()I\": 1,\n                \"Ljava/lang/Integer;-\u003evalueOf(I)Ljava/lang/Integer;\": 5,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetTaskCount()J\": 1,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003eisTerminated()Z\": 1,\n                \"Ljava/lang/String;-\u003eformat(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;\": 1,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetPoolSize()I\": 2,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003egetCorePoolSize()I\": 1,\n                \"Ljava/io/PrintStream;-\u003eprintln(Ljava/lang/String;)V\": 1,\n                \"Ljava/util/concurrent/ThreadPoolExecutor;-\u003eisShutdown()Z\": 3\n              },\n              \"fieldReferenceCounts\": {\n                \"Ljava/lang/System;-\u003eout:Ljava/io/PrintStream;\": 1\n              },\n              \"methodAccessors\": {\n                \"interface\": 0,\n                \"final\": 0,\n                \"protected\": 0,\n                \"private\": 0,\n                \"synchronized\": 0,\n                \"abstract\": 0,\n                \"native\": 0,\n                \"volatile\": 0,\n                \"transient\": 0,\n                \"public\": 1,\n                \"static\": 0,\n                \"strict\": 0\n              },\n              \"opCounts\": {\n                \"MOVE_RESULT\": 12,\n                \"IF_NEZ\": 1,\n                \"ADD_INT_LIT8\": 1,\n                \"IF_GE\": 1,\n                \"IF_LEZ\": 1,\n                \"MOVE_EXCEPTION\": 1,\n                \"SGET_OBJECT\": 1,\n                \"MOVE_RESULT_WIDE\": 2,\n                \"REM_INT\": 1,\n                \"GOTO\": 4,\n                \"IF_EQZ\": 5,\n                \"CHECK_CAST\": 1,\n                \"CONST_STRING\": 1,\n                \"NEW_ARRAY\": 1,\n                \"INVOKE_DIRECT\": 1,\n                \"IF_LE\": 1,\n                \"MOVE_RESULT_OBJECT\": 9,\n                \"INVOKE_STATIC\": 9,\n                \"IGET_OBJECT\": 17,\n                \"IGET_BOOLEAN\": 2,\n                \"RETURN_VOID\": 1,\n                \"APUT_OBJECT\": 7,\n                \"INVOKE_VIRTUAL\": 17,\n                \"NEW_INSTANCE\": 1,\n                \"MOVE\": 4,\n                \"CONST_4\": 12,\n                \"CONST_WIDE_16\": 1\n              },\n              \"stringReferenceCounts\": {\n                \"[swarm-mon] [%d/%d] active:%d, completed:%d task:%d isShutdown:%s isTerminated:%s\": 1\n              },\n              \"annotationCount\": 0,\n              \"cyclomaticComplexity\": 19,\n              \"debugItemCount\": 31,\n              \"instructionCount\": 115,\n              \"registerCount\": 11,\n              \"tryCatchCount\": 1\n            },\n            \"\u003cinit\u003e(Ljava/util/concurrent/ThreadPoolExecutor;Lcom/soong/droidswarm/TargetList;)V\": {\n              \"apiCounts\": {\n                \"Ljava/lang/Object;-\u003e\u003cinit\u003e()V\": 1\n              },\n              \"fieldReferenceCounts\": {},\n              \"methodAccessors\": {\n                \"interface\": 0,\n                \"final\": 0,\n                \"protected\": 0,\n                \"private\": 0,\n                \"synchronized\": 0,\n                \"abstract\": 0,\n                \"native\": 0,\n                \"volatile\": 0,\n                \"transient\": 0,\n                \"public\": 1,\n                \"static\": 0,\n                \"strict\": 0\n              },\n              \"opCounts\": {\n                \"RETURN_VOID\": 1,\n                \"INVOKE_DIRECT\": 1,\n                \"CONST_4\": 1,\n                \"IPUT_BOOLEAN\": 1,\n                \"IPUT_OBJECT\": 2\n              },\n              \"stringReferenceCounts\": {},\n              \"annotationCount\": 0,\n              \"cyclomaticComplexity\": 1,\n              \"debugItemCount\": 6,\n              \"instructionCount\": 6,\n              \"registerCount\": 4,\n              \"tryCatchCount\": 0\n            }\n          },\n          \"opCounts\": {\n            \"MOVE_RESULT\": 12,\n            \"IF_NEZ\": 1,\n            \"ADD_INT_LIT8\": 1,\n            \"IF_GE\": 1,\n            \"IF_LEZ\": 1,\n            \"MOVE_EXCEPTION\": 1,\n            \"SGET_OBJECT\": 1,\n            \"MOVE_RESULT_WIDE\": 2,\n            \"REM_INT\": 1,\n            \"GOTO\": 4,\n            \"IF_EQZ\": 5,\n            \"CHECK_CAST\": 1,\n            \"NEW_ARRAY\": 1,\n            \"INVOKE_DIRECT\": 2,\n            \"IPUT_BOOLEAN\": 1,\n            \"IF_LE\": 1,\n            \"NEW_INSTANCE\": 1,\n            \"MOVE_RESULT_OBJECT\": 9,\n            \"INVOKE_STATIC\": 9,\n            \"IGET_OBJECT\": 17,\n            \"IPUT_OBJECT\": 2,\n            \"IGET_BOOLEAN\": 2,\n            \"RETURN_VOID\": 2,\n            \"APUT_OBJECT\": 7,\n            \"INVOKE_VIRTUAL\": 17,\n            \"CONST_STRING\": 1,\n            \"MOVE\": 4,\n            \"CONST_4\": 13,\n            \"CONST_WIDE_16\": 1\n          },\n          \"stringReferenceCounts\": {\n            \"[swarm-mon] [%d/%d] active:%d, completed:%d task:%d isShutdown:%s isTerminated:%s\": 1\n          },\n          \"annotationCount\": 0,\n          \"cyclomaticComplexity\": 10.0,\n          \"debugItemCount\": 37,\n          \"fieldCount\": 3,\n          \"instructionCount\": 121,\n          \"registerCount\": 15,\n          \"tryCatchCount\": 1,\n          \"failedMethods\": 2\n        },\n      },\n      \"fieldReferenceCounts\": {\n        \"Landroid/widget/AdapterView$AdapterContextMenuInfo;-\u003eposition:I\": 1,\n        \"Ljava/lang/Boolean;-\u003eFALSE:Ljava/lang/Boolean;\": 1,\n        \"Ljava/util/concurrent/TimeUnit;-\u003eSECONDS:Ljava/util/concurrent/TimeUnit;\": 1,\n        \"Ljava/lang/Integer;-\u003eTYPE:Ljava/lang/Class;\": 1,\n        \"Landroid/app/Notification;-\u003eflags:I\": 2,\n        \"Ljava/lang/Boolean;-\u003eTYPE:Ljava/lang/Class;\": 2,\n        \"Ljava/lang/System;-\u003eout:Ljava/io/PrintStream;\": 2,\n        \"Landroid/os/Message;-\u003ewhat:I\": 1,\n        \"Ljava/lang/Boolean;-\u003eTRUE:Ljava/lang/Boolean;\": 2,\n        \"Landroid/content/pm/PackageInfo;-\u003eversionName:Ljava/lang/String;\": 2,\n        \"Landroid/os/Message;-\u003eobj:Ljava/lang/Object;\": 2\n      },\n      \"methodAccessorCounts\": {\n        \"interface\": 0,\n        \"final\": 0,\n        \"protected\": 12,\n        \"private\": 28,\n        \"synchronized\": 0,\n        \"abstract\": 2,\n        \"native\": 0,\n        \"volatile\": 0,\n        \"transient\": 0,\n        \"public\": 66,\n        \"static\": 23,\n        \"strict\": 0\n      },\n      \"methodDescriptorToMethod\": {\n        \"Lcom/soong/droidswarm/ExternalStorage$1;-\u003eonReceive(Landroid/content/Context;Landroid/content/Intent;)V\": {\n          \"apiCounts\": {\n            \"Landroid/util/Log;-\u003ei(Ljava/lang/String;Ljava/lang/String;)I\": 1,\n            \"Ljava/lang/StringBuilder;-\u003eappend(Ljava/lang/Object;)Ljava/lang/StringBuilder;\": 1,\n            \"Ljava/lang/StringBuilder;-\u003e\u003cinit\u003e(Ljava/lang/String;)V\": 1,\n            \"Landroid/content/Intent;-\u003egetData()Landroid/net/Uri;\": 1,\n            \"Ljava/lang/StringBuilder;-\u003etoString()Ljava/lang/String;\": 1\n          },\n          \"fieldReferenceCounts\": {},\n          \"methodAccessors\": {\n            \"interface\": 0,\n            \"final\": 0,\n            \"protected\": 0,\n            \"private\": 0,\n            \"synchronized\": 0,\n            \"abstract\": 0,\n            \"native\": 0,\n            \"volatile\": 0,\n            \"transient\": 0,\n            \"public\": 1,\n            \"static\": 0,\n            \"strict\": 0\n          },\n          \"opCounts\": {\n            \"INVOKE_DIRECT\": 1,\n            \"NEW_INSTANCE\": 1,\n            \"INVOKE_STATIC\": 2,\n            \"MOVE_RESULT_OBJECT\": 3,\n            \"INVOKE_VIRTUAL\": 3,\n            \"RETURN_VOID\": 1,\n            \"CONST_STRING\": 2\n          },\n          \"stringReferenceCounts\": {\n            \"DroidSwarm\": 1,\n            \"Watching storage: \": 1\n          },\n          \"annotationCount\": 0,\n          \"cyclomaticComplexity\": 1,\n          \"debugItemCount\": 4,\n          \"instructionCount\": 13,\n          \"registerCount\": 6,\n          \"tryCatchCount\": 0\n        },\n      },\n      \"opCounts\": {\n        \"INVOKE_INTERFACE\": 39,\n        \"FILL_ARRAY_DATA\": 1,\n        \"NEW_ARRAY\": 10,\n        \"SUB_LONG_2ADDR\": 1,\n        \"IF_EQZ\": 39,\n        \"IGET_BOOLEAN\": 5,\n        \"MOVE_OBJECT\": 6,\n        // ** SNIP **\n        \"IF_GE\": 2,\n        \"PACKED_SWITCH\": 1\n      },\n      \"stringReferenceCounts\": {\n        \"Service disconnected.\": 1,\n        \"File not found.\": 2,\n        \"Importing target \": 1,\n        \"name\": 2,\n        \"No\": 1,\n        \"Name required.\": 1,\n        \"http://\": 1,\n        \"Received start id \": 1,\n        // ** SNIP **\n        \"OVER 9000!!\": 1,\n        \"\": 9\n      },\n      \"annotationCount\": 2,\n      \"cyclomaticComplexity\": 1.888722,\n      \"debugItemCount\": 1310,\n      \"fieldCount\": 161,\n      \"instructionCount\": 2684,\n      \"registerCount\": 604,\n      \"tryCatchCount\": 45,\n      \"failedClasses\": 39\n    }\n  },\n  \"entryNameToZipEntry\": {\n    // ** SNIP **\n    \"AndroidManifest.xml\": {\n      \"name\": \"AndroidManifest.xml\",\n      \"xdostime\": 1128830327,\n      \"crc\": 3833663256,\n      \"size\": 2672,\n      \"csize\": 846,\n      \"method\": 8,\n      \"flag\": 2056\n    },\n   \"classes.dex\": {\n      \"name\": \"classes.dex\",\n      \"xdostime\": 1128830327,\n      \"crc\": 2086375952,\n      \"size\": 54324,\n      \"csize\": 21960,\n      \"method\": 8,\n      \"flag\": 2056\n    },\n    \"META-INF/MANIFEST.MF\": {\n      \"name\": \"META-INF/MANIFEST.MF\",\n      \"xdostime\": 1128830327,\n      \"crc\": 1715315727,\n      \"size\": 1314,\n      \"csize\": 622,\n      \"method\": 8,\n      \"flag\": 2056\n    }\n  },\n  \"path\": \"ignore/DroidSwarm-1.0.1.apk\"\n}\n```\n\n## License\n\n```\nCopyright 2018 RedNaga. All Rights Reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCalebFenton%2Fapkfile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCalebFenton%2Fapkfile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCalebFenton%2Fapkfile/lists"}