{"id":19176994,"url":"https://github.com/joomcode/paranoid","last_synced_at":"2026-02-18T09:02:05.852Z","repository":{"id":38238039,"uuid":"441546245","full_name":"joomcode/paranoid","owner":"joomcode","description":"String obfuscator for Android applications","archived":false,"fork":false,"pushed_at":"2023-07-06T17:00:35.000Z","size":1071,"stargazers_count":22,"open_issues_count":1,"forks_count":2,"subscribers_count":8,"default_branch":"develop","last_synced_at":"2025-05-07T20:07:00.427Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","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/joomcode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-24T20:03:21.000Z","updated_at":"2025-03-02T07:01:16.000Z","dependencies_parsed_at":"2024-11-09T10:43:12.433Z","dependency_job_id":null,"html_url":"https://github.com/joomcode/paranoid","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/joomcode/paranoid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomcode%2Fparanoid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomcode%2Fparanoid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomcode%2Fparanoid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomcode%2Fparanoid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joomcode","download_url":"https://codeload.github.com/joomcode/paranoid/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomcode%2Fparanoid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29574065,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-11-09T10:31:33.139Z","updated_at":"2026-02-18T09:02:05.830Z","avatar_url":"https://github.com/joomcode.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build](https://github.com/joomcode/paranoid/actions/workflows/build.yml/badge.svg)](https://github.com/joomcode/paranoid/actions/workflows/build.yml)\n\nParanoid\n========\n\nString obfuscator for Android applications.\n\nUsage\n-----\nIn order to make Paranoid work with your project you have to apply the Paranoid Gradle plugin\nto the project. Please notice that the Paranoid plugin must be applied **after** the Android\nplugin.\n\n```groovy\nbuildscript {\n  repositories {\n    mavenCentral()\n  }\n\n  dependencies {\n    classpath 'com.joom.paranoid:paranoid-gradle-plugin:0.3.14'\n  }\n}\n\napply plugin: 'com.android.application'\napply plugin: 'com.joom.paranoid'\n```\n\nNow you can just annotate classes with strings that need to be obfuscated with `@Obfuscate`.\nAfter you project compiles every string in annotated classes will be obfuscated.\n\nThe plugin must be applied to every Gradle module that has classes with `@Obfuscate` annotation.\n\nConfiguration\n-------------\nParanoid plugin can be configured using `paranoid` extension:\n```groovy\nparanoid {\n  // ...\n}\n\n```\n\nThe extension contains the following properties:\n- `obfuscationSeed` - `Integer`. A seed that can be used to make obfuscation stable across builds. Default value is `null`, which means that the seed\n  is computed from input files on each build.\n- `applyToBuildTypes` - Allows to apply paranoid transform for specific build types. Possible values are `'ALL'`, `'NONE'`, `'NOT_DEBUGGABLE'`. Default value is `'ALL'`\n- `enabled` — `boolean`. Allows to disable obfuscation for the project. Default value is `true`. *Deprecated*. Use `applyToBuildTypes = 'NONE'`\n\nHow it works\n------------\nLet's say you have an `Activity` that contains some string you want to be obfuscated.\n\n```java\n@Obfuscate\npublic class MainActivity extends AppCompatActivity {\n  private static final String QUESTION = \"Q: %s\";\n  private static final String ANSWER = \"A: %s\";\n\n  @Override\n  protected void onCreate(final Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.main_activity);\n\n    final TextView questionTextView = (TextView) findViewById(R.id.questionTextView);\n    questionTextView.setText(String.format(QUESTION, \"Does it work?\"));\n\n    final TextView answerTextView = (TextView) findViewById(R.id.answerTextView);\n    answerTextView.setText(String.format(ANSWER, \"Sure it does!\"));\n  }\n}\n```\n\nThe class contains both string constants (`QUESTION` and `ANSWER`) and string literals.\nAfter compilation this class will be transformed to something like this.\n\n```java\n\n@Obfuscate\npublic class MainActivity extends AppCompatActivity {\n  private static final String QUESTION = Deobfuscator.getString(4);\n  private static final String ANSWER = Deobfuscator.getString(5);\n\n  protected void onCreate(final Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.main_activity);\n\n    final TextView questionTextView = (TextView) findViewById(R.id.questionTextView);\n    questionTextView.setText(String.format(Deobfuscator.getString(0), Deobfuscator.getString(1)));\n\n    final TextView answerTextView = (TextView) findViewById(R.id.answerTextView);\n    answerTextView.setText(String.format(Deobfuscator.getString(2), Deobfuscator.getString(3)));\n  }\n}\n\n```\n\nLicense\n=======\n    Copyright 2023 SIA Joom\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoomcode%2Fparanoid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoomcode%2Fparanoid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoomcode%2Fparanoid/lists"}