
{"id":7889,"date":"2024-09-16T14:00:25","date_gmt":"2024-09-16T14:00:25","guid":{"rendered":"https:\/\/www.branex.ae\/blog\/?p=7889"},"modified":"2024-10-08T11:28:13","modified_gmt":"2024-10-08T11:28:13","slug":"why-how-to-use-proguard-in-android-development","status":"publish","type":"post","link":"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/","title":{"rendered":"Why &#038; How to Use Proguard in Android Development?"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Why_How_to_Use_Proguard_in_Android_Development\" >Why &amp; How to Use Proguard in Android Development?\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#What_Are_the_Features_of_Proguard_in_Android\" >What Are the Features of Proguard in Android?\u00a0<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Shrinking\" >Shrinking<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Optimization\" >Optimization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Preverification\" >Preverification<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Obfuscation\" >Obfuscation<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#How_to_Apply_Proguard_in_Android_Backend\" >How to Apply Proguard in Android Backend?\u00a0<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Modify_build_gradle_file\" >Modify build. gradle file<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Create_or_Modify_ProGuard_Rules_proguard-rulespro\" >Create or Modify ProGuard Rules (proguard-rules.pro)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Testing_the_Backend_with_ProGuard_Enabled\" >Testing the Backend with ProGuard Enabled<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.branex.ae\/blog\/why-how-to-use-proguard-in-android-development\/#Concluding_Thoughts\" >Concluding Thoughts\u00a0<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Why_How_to_Use_Proguard_in_Android_Development\"><\/span><b>Why &amp; How to Use Proguard in Android Development?\u00a0<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">There\u2019s always an upsurge in discussions regarding the significance and use of Proguard within the Android community. However, there are plenty of concerns that we often hear regarding the security aspects &amp; performance optimization of many Android applications. Today, having an APK without proper guard rules can put the overall Android experience at risk. Some of these major risks are other Android developers using decompile and reverse engineering. Once the Android application is reverse engineered, developers can easily access the code resources. They can easily access critical logic functions &amp; data.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, when proper proguard rules are configured at the backend, it becomes difficult for the Android app to be reverse engineered. It may turn out to be impossible, but proguard obfuscates the code &amp; decreases the chance of it being readable. In today\u2019s article, we are going to talk about all the features and examples associated with proguard in depth and detail.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The whole idea is to better equip you with the concept of proguard in Android development.\u00a0<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"What_Are_the_Features_of_Proguard_in_Android\"><\/span><b>What Are the Features of Proguard in Android?\u00a0<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Here\u2019s the complete breakdown of the key features of Proguard in Android:\u00a0<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Shrinking\"><\/span><b>Shrinking<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">ProGuard removes unused classes, methods, and fields from your code.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It minimizes the size of the app by eliminating unnecessary code that\u2019s never called or referenced, resulting in a more lightweight APK file. Shrinking helps in minimizing the size of APK.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It applies the shrinking to different classes which includes variables, methods, etc. The Proguard recognizes which class members are used and applies the shrinking process on them, yet at the same time discards every other code. So, let\u2019s say if there is any unused code from the application that requires omitting, shrinking will eventually remove these additional code bundles.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can use any APK Analyzer tool of your choice and bundle it with Android Studio to check the code size of the Android build before and after applying proguard rules.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It will offer you insight on the proguard\u2019s complete compression capabilities.<\/span><\/p>\n<p><a href=\"https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap.png\"><img decoding=\"async\" class=\"size-full wp-image-7902 aligncenter\" src=\"https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap.png\" alt=\"Android-Displayingbitmap\" width=\"771\" height=\"138\" srcset=\"https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap.png 771w, https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap-300x54.png 300w, https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap-260x47.png 260w, https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap-50x9.png 50w, https:\/\/www.branex.ae\/blog\/wp-content\/uploads\/2024\/09\/Android.Displayingbitmap-150x27.png 150w\" sizes=\"(max-width: 771px) 100vw, 771px\" \/><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Optimization\"><\/span><b>Optimization<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">The next step for ProGuard analyzes the code and applies various optimization techniques, such as inlining short methods and removing redundant instructions. For example, it removes any peephole optimizations, reduces code duplication, minimizes inline short &amp; constant methods.\u00a0<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Preverification\"><\/span><b>Preverification<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">ProGuard performs a pre-verification step for Java classes, making them compatible with the verification process in Android&#8217;s runtime environments. Preverification doesn\u2019t require entry points, it simply adds preverification information to classes which is required by certain Java versions.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Preverification is necessary as it improves the startup time of your Android.\u00a0<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Obfuscation\"><\/span><b>Obfuscation<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">As soon as all the unwanted code is removed, proguard begins with obfuscating the code.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It makes the code tough to read by changing all the classes, classes methods, variable names and other class members renamed to random characters. This way, it does create reference internally, but tightens up the toughness so no hacker can read and understand the business logic behind the code.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">As a result, your Android code remains protected and you don\u2019t face unfortunate situations.\u00a0\u00a0<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"How_to_Apply_Proguard_in_Android_Backend\"><\/span><b>How to Apply Proguard in Android Backend?\u00a0<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">To apply ProGuard on the Android backend (specifically within your Android app\u2019s backend processing or logic), you need to follow these steps to enable ProGuard during the build process.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is typically done during the release build, but you can also configure it for other build types like development or staging.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Modify_build_gradle_file\"><\/span><b>Modify <\/b><span style=\"color: #14918a;\"><b>build. gradle<\/b><\/span><b> file<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">ProGuard is applied during the build process by enabling code shrinking and obfuscation in your <\/span><span style=\"font-weight: 400; color: #14918a;\">build.gradle<\/span><span style=\"font-weight: 400;\"> file.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the <\/span><b>app-level<\/b> <span style=\"font-weight: 400; color: #14918a;\">build.gradle<\/span><span style=\"font-weight: 400;\"> file, locate the <\/span><span style=\"font-weight: 400; color: #14918a;\">build Types<\/span><span style=\"font-weight: 400;\"> block and apply ProGuard for the desired build type (usually for release builds but can also be applied to other custom build types):<\/span><\/p>\n<p><strong>Code Snippet:<\/strong><\/p>\n<p><span style=\"color: #14918a;\">android {<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0buildTypes {<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0release {<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0minifyEnabled true\u00a0 \/\/ Enables ProGuard<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0shrinkResources true\u00a0 \/\/ Removes unused resources<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proguardFiles getDefaultProguardFile(&#8216;proguard-android-optimize.txt&#8217;), &#8216;proguard-rules.pro&#8217;<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #14918a;\">}<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400; color: #14918a;\">minifyEnabled true<\/span><span style=\"font-weight: 400;\"><span style=\"color: #14918a;\">:<\/span> Enables ProGuard for shrinking, obfuscating, and optimizing your code.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400; color: #14918a;\">shrinkResources true<\/span><span style=\"font-weight: 400;\"><span style=\"color: #14918a;\">:<\/span> Removes unused resources such as images and XML files from the APK.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400; color: #14918a;\">proguardFiles<\/span><span style=\"font-weight: 400;\"><span style=\"color: #14918a;\">:<\/span> Specifies the default ProGuard rules and your custom ProGuard rules.<\/span><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Create_or_Modify_ProGuard_Rules_proguard-rulespro\"><\/span><b>Create or Modify ProGuard Rules (<\/b><span style=\"color: #14918a;\"><b>proguard-rules.pro<\/b><\/span><b>)<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">ProGuard comes with default rules, but you may need to customize them for your backend logic, especially if your app uses libraries or reflection. These custom rules are added in a file called <\/span><span style=\"font-weight: 400;\">proguard-rules.pro<\/span><span style=\"font-weight: 400;\">, located in the project\u2019s root directory.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">For example, if you\u2019re using Retrofit or any reflection-based libraries, add rules like:<\/span><\/p>\n<p><strong>Code Snippet:<\/strong><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"color: #14918a;\"><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"># Retain class members that are used by reflection<br \/>\n<\/span><span style=\"font-weight: 400;\">-keep class com.example.backend.** { *; }<\/span><\/span><\/p>\n<p><span style=\"color: #14918a;\"><span style=\"font-weight: 400;\"># Keep classes and methods annotated with @SerializedName<br \/>\n<\/span><span style=\"font-weight: 400;\">-keepattributes *Annotation*<\/span><\/span><\/p>\n<p><span style=\"color: #14918a;\"><span style=\"font-weight: 400;\"># Keep all class members for Retrofit<br \/>\n<\/span><span style=\"font-weight: 400;\">-keep class retrofit2.** { *; }<\/span><\/span><\/p>\n<p><span style=\"color: #14918a;\"><span style=\"font-weight: 400;\"># Avoid obfuscating classes used in serialization\/deserialization<br \/>\n<\/span><span style=\"font-weight: 400;\">-keepnames class **.R<\/span><\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Testing_the_Backend_with_ProGuard_Enabled\"><\/span><b>Testing the Backend with ProGuard Enabled<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">After ProGuard is enabled, test your app to ensure that the backend logic still functions as expected. ProGuard can sometimes remove code or break functionality if misconfigured, especially if your backend uses reflection or external libraries.<\/span><\/p>\n<p><b>Testing tips:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Always test in a <\/span><b>Release<\/b><span style=\"font-weight: 400;\"> or <\/span><b>Staging<\/b><span style=\"font-weight: 400;\"> environment with ProGuard enabled.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Watch out for crashes or missing functionality in areas that rely on dynamic class loading, reflection, or third-party libraries.<\/span><\/li>\n<\/ul>\n<p><b>Enable ProGuard for Debug Builds (Optional)<\/b><b><br \/>\n<\/b><span style=\"font-weight: 400;\">If you want to test ProGuard while in development or during debugging, you can enable it for the <\/span><span style=\"font-weight: 400;\">debug<\/span><span style=\"font-weight: 400;\"> build type in the same way:<\/span><\/p>\n<p><strong>Code Snippet:<\/strong><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<span style=\"color: #14918a;\">android {<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0buildTypes {<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0debug {<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0minifyEnabled true\u00a0 \/\/ Enables ProGuard in debug mode<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0proguardFiles getDefaultProguardFile(&#8216;proguard-android-optimize.txt&#8217;), &#8216;proguard-rules.pro&#8217;<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #14918a;\">\u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #14918a;\">}<\/span><\/span><\/p>\n<p><span style=\"font-weight: 400;\">By following these steps, ProGuard will apply optimizations, shrink your backend code, and obfuscate sensitive parts of the app, making it more efficient and secure.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once, you have applied Proguard and made a clean build, here are few essential files you need to make:\u00a0<\/span><\/p>\n<p><b>\u201cMapping.txt\u201d\u00a0<\/b><\/p>\n<p><span style=\"font-weight: 400;\">During the obfuscation process, class &amp; member names are altered, this file serves as a reference to track the changes. It provides a mapping of the original names to their obfuscated counterparts, including classes, methods &amp; variables. It allows you to trace how your code was modified after the obfuscation step.\u00a0<\/span><\/p>\n<p><b>\u201cSeeds.txt\u201d\u00a0<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This file contains a list of classes that were excluded from obfuscation. If certain parts of the code were specified to be left untouched in your <\/span><span style=\"font-weight: 400;\">proguard-rules.pro<\/span><span style=\"font-weight: 400;\"> file, they will appear here. It\u2019s a useful tool for verifying that the rules you applied worked as expected, ensuring that important code wasn&#8217;t obfuscated. Instead of relying solely on ProGuard, checking this file is a good way to ensure critical elements remain protected.<\/span><\/p>\n<p><b>\u201cUsage.txt\u201d\u00a0\u00a0<\/b><\/p>\n<p><span style=\"font-weight: 400;\">This file shows all the code that ProGuard removed during the shrinking step, such as unused or unreferenced classes and methods. It&#8217;s essential to review this file to ensure that only unnecessary code was stripped away, and nothing important was accidentally removed. Misconfigurations in ProGuard can cause issues or crashes in release builds, so it&#8217;s wise to double-check here for accuracy.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Concluding_Thoughts\"><\/span><b>Concluding Thoughts\u00a0<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">ProGuard is a must-have tool for optimizing and securing your Android app. It reduces app size, boosts performance, and protects your code from reverse engineering.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By carefully configuring ProGuard rules, you can reduce the risk of reverse engineering and tampering while simultaneously optimizing the app\u2019s size and speed.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">From shrinking unused code and resources to obfuscating sensitive logic, ProGuard ensures that your Android app remains efficient and secure without compromising on functionality.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you don\u2019t want to leave your app vulnerable, it\u2019s best to configure Proguard at the backend today.\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why &amp; How to Use Proguard in Android Development?\u00a0 There\u2019s always an upsurge in discussions regarding the significance and use of Proguard within the Android community&#8230;.<\/p>\n","protected":false},"author":11,"featured_media":7896,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[420],"tags":[],"class_list":["post-7889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-app-development"],"_links":{"self":[{"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/posts\/7889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/comments?post=7889"}],"version-history":[{"count":0,"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/posts\/7889\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/media\/7896"}],"wp:attachment":[{"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/media?parent=7889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/categories?post=7889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.branex.ae\/blog\/wp-json\/wp\/v2\/tags?post=7889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}