{"id":15297053,"url":"https://github.com/respresso/respresso-client-android","last_synced_at":"2026-01-11T17:33:31.931Z","repository":{"id":131064067,"uuid":"158263748","full_name":"respresso/respresso-client-android","owner":"respresso","description":"Save development time! Respresso automatically transforms and delivers your digital assets into your projects","archived":false,"fork":false,"pushed_at":"2022-08-19T08:08:42.000Z","size":465,"stargazers_count":12,"open_issues_count":2,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-13T14:21:58.857Z","etag":null,"topics":["android","android-development","designer","developer-tool","digital-asset-management","gradle","java","kotlin","resource-management","respresso","synchronization","translator"],"latest_commit_sha":null,"homepage":"https://respresso.io","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/respresso.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-19T17:18:02.000Z","updated_at":"2023-10-15T02:58:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"183c249e-a981-44db-abb4-6d25f6840767","html_url":"https://github.com/respresso/respresso-client-android","commit_stats":null,"previous_names":["pontehu/respresso-client-android"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/respresso/respresso-client-android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/respresso%2Frespresso-client-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/respresso%2Frespresso-client-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/respresso%2Frespresso-client-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/respresso%2Frespresso-client-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/respresso","download_url":"https://codeload.github.com/respresso/respresso-client-android/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/respresso%2Frespresso-client-android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28315879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"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":["android","android-development","designer","developer-tool","digital-asset-management","gradle","java","kotlin","resource-management","respresso","synchronization","translator"],"created_at":"2024-09-30T19:14:49.941Z","updated_at":"2026-01-11T17:33:31.915Z","avatar_url":"https://github.com/respresso.png","language":"Kotlin","readme":"# 🛑 Docs out-of-date notice! 🛑\nThis documentation is not updated anymore. \nAll documentation of Respresso moved to https://respresso.io/docs.\n## ✔️ Up-to-date docs for Android is here:\n### Get started with Respresso\n| Content                                          | Link                                                                         |\n| ------------------------------------------------ | -----------------------------------------------------------------------------|\n| Add Respresso to new or exiting Android project  | https://respresso.io/docs/guides/android-project-setup                       |\n| Get started with Respresso CLI (auto-sync)       | https://respresso.io/docs/get-started-with-respresso-sync                    |\n| Migrate from legacy Gradle plugin to the new CLI | https://respresso.io/docs/guides/migrate-from-legacy-android-gradle-plugin   |\n\n### Learn more - Docs for Android Devs\n| Content                                          | Link                                                                         |\n| ------------------------------------------------ | -----------------------------------------------------------------------------|\n| All about Respresso CLI setup in Gradle build   | https://respresso.io/docs/android-gradle-resource-sync                        |\n| Respresso CLI reference (auto-sync)             | https://respresso.io/docs/respresso-cli-reference                             |\n| Respresso CLI config reference (auto-sync)      | https://respresso.io/docs/respresso-cli-config-reference                      |\n| Import existing resources from Android project  | [Localization](https://respresso.io/docs/localization/import), [Image (raster or drawable)](https://respresso.io/docs/image/import), [Color](https://respresso.io/docs/color/import) |\n| Localization format - strings.xml               | https://respresso.io/docs/localization/android-strings-xml-format             |\n| Localization variables in Respresso             | https://respresso.io/docs/localization/variables                              |\n| Localization variable formatting                | https://respresso.io/docs/localization/variable-formatting                    |\n| Localization variable placeholders              | https://respresso.io/docs/localization/custom-variable-placeholders           |\n\n## Seriously, 🛑 stop 🛑 here and go to the [new docs](https://respresso.io/docs/guides/android-project-setup)!\n\n---\n\n[\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/pontehu/respresso-client-android/blob/master/images/header_android.png\" height=\"220\" /\u003e\u003c/div\u003e](https://respresso.io)  \n\n# Respresso Android client [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Save%20development%20time%21%20Respresso%20automatically%20transforms%20and%20delivers%20your%20digital%20assets%20into%20your%20projects\u0026url=https://respresso.io\u0026via=respresso_io\u0026hashtags=developer,tool,localization,image,resources,digital-assets,convert,automation)  \n\n[Respresso](https://respresso.io) is a centralized resource manager for shared Android, [iOS](https://github.com/pontehu/respresso-client-ios) and [Web frontend](https://github.com/pontehu/respresso-sync-for-clients#web) projects.\nIt allows you to simply import the latest assets into your workspace.\nYou may store several versions of the same resource in the cloud and pick the ones you need to import.\nRespresso currently supports six types of resources:\n* Images\n* App icons\n* Localization\n* Fonts\n* Colors\n* Raw\n\n## Table of contents\n\n- [Usage](#usage)\n\t- [Breakdown of the plugin configuration](#breakdown-of-the-plugin-configuration)\n\t- [Tips](#tips)\n- [Live localization](#live-localization) \t\n\t- [Obligation](#obligation)\n\t- [Usage](#usage)\n\t- [How to turn on/off](#how-to-turn-on/off)\n\t- [How to setting up](#how-to-setting-up)\n\t- [Update text in a view](#update-text-in-a-view)  \n\n## Usage\nThe plugin aar needs to be defined in the classpath of your build script. It is directly available on Maven central. This snippet shows how to add repositories to your root `build.gradle`:\n```groovy\nbuildscript {\n\n    dependencies {\n        classpath \"hu.ponte.respresso:client-android:1.0.0\"\n    }\n}\n```\n\nTo use the Respresso Android plugin, include this snippet in your app's build.gradle (`app/build.gradle`):\n```groovy\napply plugin: \"hu.ponte.respresso\"\n\nrespresso {\n    projectToken \"YOUR_PROJECT_TOKEN_HERE\"\n    resources {\n        require \"localization:1.0.0\"\n        require \"color:1.0.0\"\n        require \"appIcon:1.0.0\"\n        require \"image:1.0.0\"\n        require \"font:1.0.0\"\n    }\n\n    server \"https://app.respresso.io\"\n}\n```\nPlease note that you must remove or comment out unused resources types.\nNow you can build your project and Respresso will import all resources that were stored at https://app.respresso.io previously. After the first successful build Respresso will create a \"respressofile.lock\" file on your project's root directory. This file contains information about current assets’ metadata.\n\n#### Automatic usage\nSimply press the Run button for your \"app\". Respresso will synchronize all resources before builds since its plugin is built into your build flow.\n\n#### Manual usage\nTo synchronize resources without building, use gradle. Use the GUI \"Tasks/other/getRespressoResForDebug\"\n\n![Respresso synchronize GUI](/images/respresso-gradle.png)\n\nor use terminal and type:  \nWindows:\n```\ngradlew getRespressoResForDebug\n```\n\nLinux:\n```\n./gradlew getRespressoResForDebug\n```\n\nMac:\n```\n./gradlew getRespressoResForDebug\n```\n\nNote! Respresso will remove all resources that do not belong to it. If you would like to use unfollowed or client-specific resources, read the Tips section.\n\n### Breakdown of the plugin configuration\n* Include the project token received during initialization of your project in the Respresso web interface. This is done in the same manner as the host with the keyword \"project_token\" and your token inside double quotation marks\n* Specify the required resources inside the resources section using the following format:\nrequire \"[resource_name]:[version_number]\"\n\nThe currently accepted resource names are:\n* image\n* appIcon\n* color\n* localization\n* font\n* raw\n\nAccepted version formats are:\n* [major].[minor].[patch]          eg. 1.2.0\n* [major].[minor].[patch]+         eg. 1.2.0+ (not available in strict mode)\n* [major].[minor]+                 eg. 1.2+ (not available in strict mode)\n\n\n#### Optional arguments\n####### server\nSpecify the server of your assets in the last line by writing \"server\" and your URL in double quotation marks separated by a space.\nBy omitting this argument Respresso will use its default host URL for syncing.\n```\nserver \"https://app.respresso.io\"\n```\n\n####### strictMode\nEnabling strict mode will guarantee you get the same results each time you sync your assets. If set to true, you may only specify exact version numbers in your Respressofile. This option is set to false by default. Usage example:\n```\nstrictMode true\n```\n\n####### enabled\nYou can turn off synchronization. Default value is true.\n```\nenabled false\n```\n\n### Tips\n###### Android Studio is unable to find a resource\nAndroid Studio may sometimes ignore new resource files. If this is the case, use the \"File/Invalidate caches / Restart...\" option.\n\n###### Use your own resources\nYou can create a new module for Respresso. Respresso will synchronize all followed resources into the \"module's res\" folder in this case and your main module can contain unique resources.\n\n## Live Localization\nRespresso serve a real-time preview about your localized strings. It shows you that how the translations are going to look like in your mobile app or web. No need to wait for a next deployment.\n\n### Obligation\nLive localization is a higher abstraction layer over Respresso core. That is why Respresso usage is mandatory.\n\n### Usage\n\nAdd this dependency in your app's build.gradle (app/build.gradle):\n\n```groovy\ndependencies {\n\t...\n\timplementation \"hu.ponte.respresso:live-edit-android:1.0.0\"\n\t...\n}\n```\n\n### How to turn on/off\nUse this snipet if you would like to build your apk without live localization option.\n```groovy\nbuildTypes {\n\t...\n\tdevelop {\n\t\tbuildConfigField \"Boolean\", \"RespressoPreRelease\", 'true'\n\t}\n\trelease {\n\t\tbuildConfigField \"Boolean\", \"RespressoPreRelease\", 'false'\n\t}\n}\n```\n\n### How to setting up\nCreate an application class and register it in your manifest file. Append this snipet into the class:  \nKotlin:\n```Koltlin\noverride fun onCreate() {\n\tsuper.onCreate()\n\n\tRespresso.init(this, BuildConfig.RespressoPreRelease)\n}\n```\n\nJava:\n```Java\n@Override\npublic void onCreate() {\n\tsuper.onCreate();\n\n\tRespresso.init(this, BuildConfig.RespressoPreRelease);\n}\n```\n\nUse these configurations in you activity. (It's recommended that use a BaseActivity).  \nKotlin:\n``` Kotlin\noverride fun attachBaseContext(newBase: Context) {\n\tval context = Respresso.wrapContext(newBase)\n\tsuper.attachBaseContext(context)\n}\n\noverride fun onResume() {\n\tsuper.onResume()\n\tRespresso.create(this)\n}\n\noverride fun onDestroy() {\n\tsuper.onDestroy()\n\tRespresso.destroy(this)\n}\n\n```\nJava:\n``` Java\n@Override\nprotected void attachBaseContext(Context newBase) {\n\tContext context = Respresso.wrapContext(newBase);\n\tsuper.attachBaseContext(context);\n}\n\n@Override\nprotected void onResume() {\n\tsuper.onResume();\n\tRespresso.create(this);\n}\n\n@Override\nprotected void onDestroy() {\n\tsuper.onDestroy();\n\tRespresso.destroy(this);\n}\n```\n\n### Update text in a view\nThe easiest usage when you bind your text and view by Respresso.\n``` Kotlin\nRespresso.with(context).text(R.string.id_from_strings_xml).withAutoUpdate().into(view)\n```\n\nLet see some alternatives:\n``` Kotlin\nRespresso.with(context).hint(R.string.hint_id).withAutoUpdate().into(view)\nRespresso.with(context).error(R.string.error_id).withAutoUpdate().into(view)\nRespresso.with(context).title(R.string.title_id).withAutoUpdate().into(view)\nRespresso.with(context).subtitle(R.string.subtitle_id).withAutoUpdate().into(view)\n```\n\nThe technique is really simple. You have to use\n\nRespresso.with(context).text()  -\u003e instead of view.setText()\nRespresso.with(context).hint()  -\u003e instead of view.hint()\nRespresso.with(context).title() -\u003e instead of Toolbar/ActionBar/MenuItem.setTitle()\netc.\n\nand you concatenate more modifiers when a view has more options, like an EditTextView:\nRespresso.with(context).text(R.string.text_id_from_strings_xml).hint(R.string.hint_id_from_strings_xml).withAutoUpdate().into(edit_text_view)\n\n#### Update text in a CustomView\nSome cases Respresso unable to fill the view with demanded text(s). Don't worry, You can get notification about changes.\nUse this form in case of single text:\n\n``` Kotlin\nRespresso.with(context).string(R.string.text_id_from_strings_xml).into(view).dataReadyText = { view.setTextSomehow = it }\n```\n\n```Java\nRespresso.with(context).string(R.string.text_id_from_strings_xml).into(view).setOnDataReadyText(new DataReadyText() {\n\t@Override\n\tpublic void onDataReady(@Nullable String text) {\n\t\tview.setTextSomehow(text)\n\t}\n});\n```\nUse this form in case of multiple texts:  \nKotlin:\n``` Kotlin\nRespresso.with(context).strings(arrayOf(\n\t\t\tRespressoStrings(R.string.first_text_id_from_strings_xml)\n\t\t\tRespressoStrings(R.string.second_text_id_from_strings_xml, \"TAG\")\n\t\t)\n\t).into(view).dataReadyTexts = {\n\t\tview.setTextSomehow1 = it[0].text\n\t\tif(it[1].TAG == \"TAG\")\n\t\t\tview.setTextSomehow2 = it[1].text\n\t}\n```\n\nJava:\n```Java\nRespresso.with(this).strings(new RespressoStrings[]{\n\t\t\tnew RespressoStrings(R.string.name, 1),\n\t\t\tnew RespressoStrings(R.string.name, 2)\n        }).into(tv1).setOnDataReadyTexts(new DataReadyTexts() {\n            @Override\n            public void onDataReady(@Nullable RespressoText[] texts) {\n                view.setTextSomehow1 = it[0].getText())\n\t\t\t\tif(it[1].getTAG() == \"TAG\")\n\t\t\t\t\tview.setTextSomehow2 = it[1].getText()\n            }\n        });\n```\n\n#### Update possibilities\nwithAutoUpdate will update your texts whenever it changes if it can.\n``` Kotlin\nRespresso.with(context).text(R.string.id).withAutoUpdate().into(view)\n```\nwithNotifyUpdate will send you a notification into dataReady listener and you can handle it. It is not refresh your views content automatically.\n``` Kotlin\nRespresso.with(context).text(R.string.id).withNotifyUpdate().into(view)\n```\nnoUpdate will fill your view only once. It is not send notification and not update your text.\n``` Kotlin\nRespresso.with(context).text(R.string.id).noUpdate().into(view)\n```\n\n#### How to use it\n1. Check above instructions\n2. Go to respresso(https://app.respresso.io) sign in and choose a project\n3. Click localization in the left panel and select the same version that you synked into your project \n4. Get your phone and shake it\n5. Switch on 'Localization / Connection' in the popup window\n\u003e Now your modifications are going to appearance when you click the 'Save' button on the web\n6. For using Live Edit Module\\* shake your phone again and switch on 'Localization / Live Editor' in the popup window\n7. On web click on the 'Live Editor' button on the top right area\n8. Scan the QR Code with your phone which visible in your web browser's top right section\n\nLet see what happened after 7th option. You activated a visible items filter and your list have less elements than before and don't have to use Save button to get updated texts. Be careful, this modification stored just in your phone's memory and you can lose it. Use the Save button to store your modifications. \n\n\\* Live Edit Module: shows real-time preview how the translations will look like in your mobile app. Check the translations’ accuracy, length and the UI experience in real-time.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frespresso%2Frespresso-client-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frespresso%2Frespresso-client-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frespresso%2Frespresso-client-android/lists"}