{"id":13597349,"url":"https://github.com/iiordanov/remote-desktop-clients","last_synced_at":"2026-04-30T03:03:53.602Z","repository":{"id":2573866,"uuid":"3554148","full_name":"iiordanov/remote-desktop-clients","owner":"iiordanov","description":"VNC, RDP, SPICE, and oVirt/RHEV/Proxmox Clients for Android and Blackberry 10","archived":false,"fork":false,"pushed_at":"2026-04-06T20:17:55.000Z","size":46095,"stargazers_count":2422,"open_issues_count":166,"forks_count":588,"subscribers_count":145,"default_branch":"master","last_synced_at":"2026-04-06T22:14:28.409Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iiordanov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":"FUNDING.yml","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":"iiordanov","custom":["https://www.paypal.me/ikiordanov"]}},"created_at":"2012-02-26T19:22:07.000Z","updated_at":"2026-04-06T20:18:01.000Z","dependencies_parsed_at":"2024-01-06T07:25:54.343Z","dependency_job_id":"e842aab5-fd38-4944-9066-8dbcda9e557f","html_url":"https://github.com/iiordanov/remote-desktop-clients","commit_stats":{"total_commits":1331,"total_committers":15,"mean_commits":88.73333333333333,"dds":0.04507888805409466,"last_synced_commit":"6a1a860e0004595ff5353b2c00c7ae808239a271"},"previous_names":[],"tags_count":228,"template":false,"template_full_name":null,"purl":"pkg:github/iiordanov/remote-desktop-clients","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iiordanov%2Fremote-desktop-clients","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iiordanov%2Fremote-desktop-clients/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iiordanov%2Fremote-desktop-clients/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iiordanov%2Fremote-desktop-clients/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iiordanov","download_url":"https://codeload.github.com/iiordanov/remote-desktop-clients/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iiordanov%2Fremote-desktop-clients/sbom","scorecard":{"id":483322,"data":{"date":"2025-08-11","repo":{"name":"github.com/iiordanov/remote-desktop-clients","commit":"372aa2dd7c02b6b7dbce4cac2385c375e6cfc9d3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":5,"reason":"binaries present in source code","details":["Warn: binary detected: bVNC/libs/com.antlersoft.android.contentxml.jar:1","Warn: binary detected: bVNC/libs/com.antlersoft.android.db.jar:1","Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: pubkeyGenerator/libs/ecc-25519-java-1.0.3.jar:1","Warn: binary detected: pubkeyGenerator/libs/eddsa-0.1.0.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: docker/Dockerfile:1: pin your Docker image by updating ubuntu:noble to ubuntu:noble@sha256:7c06e91f61fa88c08cc74f7e1b7c69ae24910d745357e0dfe1d2c0322aaf20f9","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact RELEASE-v5.9.9 not signed: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/236450273","Warn: release artifact RELEASE-v5.9.4 not signed: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230228026","Warn: release artifact RELEASE-v5.9.3 not signed: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230227889","Warn: release artifact RELEASE-v5.9.2 not signed: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230227788","Warn: release artifact RELEASE-v5.9.1 not signed: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230227683","Warn: release artifact RELEASE-v5.9.9 does not have provenance: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/236450273","Warn: release artifact RELEASE-v5.9.4 does not have provenance: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230228026","Warn: release artifact RELEASE-v5.9.3 does not have provenance: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230227889","Warn: release artifact RELEASE-v5.9.2 does not have provenance: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230227788","Warn: release artifact RELEASE-v5.9.1 does not have provenance: https://api.github.com/repos/iiordanov/remote-desktop-clients/releases/230227683"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T17:09:58.322Z","repository_id":2573866,"created_at":"2025-08-19T17:09:58.322Z","updated_at":"2025-08-19T17:09:58.322Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31492751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"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-08-01T17:00:31.022Z","updated_at":"2026-04-06T23:01:22.394Z","avatar_url":"https://github.com/iiordanov.png","language":"Java","funding_links":["https://patreon.com/iiordanov","https://www.paypal.me/ikiordanov","https://www.patreon.com/posts/113067871","https://www.patreon.com/posts/113067997","https://www.patreon.com/posts/113067946","https://www.patreon.com/posts/113067670"],"categories":["Java","工具程式"],"sub_categories":[],"readme":"# Intro\n\nThis is the source code for bVNC, aRDP, aSPICE and Opaque, four remote desktop\nclients for Android.\n\nPlease see the LICENSE file for information on how the source is licensed.\n\n# Android App Store Links\n\nbVNC is a VNC client. It's released as a donation version at [bVNC Pro](https://play.google.com/store/apps/details?id=com.iiordanov.bVNC),\nand as a free version at [bVNC](https://play.google.com/store/apps/details?id=com.iiordanov.freebVNC)\nand [IzzyOnDroid](https://apt.izzysoft.de/packages/com.iiordanov.freebVNC)\n\naRDP is a RDP client. It's released as a donation version at, [aRDP Pro](https://play.google.com/store/apps/details?id=com.iiordanov.aRDP)\nand as a free version at [aRDP](https://play.google.com/store/apps/details?id=com.iiordanov.freeaRDP)\nand [IzzyOnDroid](https://apt.izzysoft.de/packages/com.iiordanov.freeaRDP)\n\naSPICE is a SPICE Protocol client. It's available as a donation version at [aSPICE Pro](https://play.google.com/store/apps/details?id=com.iiordanov.aSPICE),\nand as a free version at [aSPICE](https://play.google.com/store/apps/details?id=com.iiordanov.freeaSPICE)\n\nOpaque is an oVirt, RHEV, and Proxmox client available at [Opaque](https://play.google.com/store/apps/details?id=com.undatech.opaque)\n\nThe donation versions are also available on Amazon App Store at\n[bVNC](https://www.amazon.ca/Unda-Tech-VNC-Pro-Viewer/dp/B00OWZYE1A), [aRDP](https://www.amazon.ca/Unda-Tech-RDP-Pro-Client/dp/B00OX1RBAO), [aSPICE](https://www.amazon.ca/aSPICE-Pro-Secure-SPICE-Client/dp/B07B6K9BDB), [Opaque](https://www.amazon.ca/Opaque-oVirt-RHEV-Proxmox-Client/dp/B07HMTYT1L).\n\n## Apple App Store Links\n\nbVNC Pro is available at [bVNC Pro](https://apps.apple.com/app/bvnc-pro/id1506461202).\n\naRDP is available at [aRDP Pro](https://apps.apple.com/app/ardp-pro/id1620745523)\n\naSPICE Pro is available at [aSPICE Pro](https://apps.apple.com/app/aspice-pro/id1560593107).\n\nFind bVNC Pro, aRDP Pro, and aSPICE Pro for MacOS and iOS source code\n[here](https://gitlab.com/iiordanov/remote-desktop-clients-ios)\n\n# Links to Pro APKs\n\nYou can always get the latest Pro versions by supporting us as a Patreon member and keeping your membership active!\n\n[bVNC Pro](https://www.patreon.com/posts/113067871)\n[aRDP Pro](https://www.patreon.com/posts/113067997)\n[aSPICE Pro](https://www.patreon.com/posts/113067946)\n[Opaque](https://www.patreon.com/posts/113067670)\n\n# Releases\n\nYou can find all free Android APK files [here](https://github.com/iiordanov/remote-desktop-clients/releases)\n\n# Building\n\nThere are different ways to build the applications depending on OS and whether you are using\npre-built libraries, or building them from scratch.\n\n## On Linux and WSL2\n\nThese instructions should work on Ubuntu 18.04, 20.04, and Windows Subsystem for Linux 2.\nBuilds are likely to also work on MacOS, feedback is welcome.\n\nPick one of I-a, I-b, or I-c below, then move onto II.\n\n### I-a With Prebuilt Libraries\n\nBuilding the projects with pre-built dependencies.\n\n        ./download-prebuilt-dependencies.sh\n        ./bVNC/prepare_project.sh --skip-build libs nopath\n\n### I-b From Scratch with Docker\n\nMake sure you're running the commands below from the root of the project.\nEnsure ANDROID_SDK is set to the path to your SDK.\n\n```bash\necho \"USER_UID=$(id -u)\" \u003e docker/.env\necho \"USER_GID=$(id -g)\" \u003e\u003e docker/.env\necho \"CURRENT_WORKING_DIR=$(pwd)\" \u003e\u003e docker/.env\ndocker-compose -f docker/docker-compose.yml up\n```\n\n### I-c From Scratch\n\nBuilding from scratch and working in Android Studio.\n\n  - Install some packages. On Ubuntu:\n        apt install gnome-common gobject-introspection nasm gtk-doc-tools python-is-python3\n\n  - On Linux, install Android Studio\n  - Install Android SDK from Tools -\u003e SDK Tools\n  - Install Android SDK command-line tools and CMake from the SDK Tools tab\n  - Ensure that the path to ANDROID_SDK is ${HOME}/Android/Sdk/ and correct below if necessary\n\n  - To build the projects\n\n    - If building a non-custom client, set PROJECT to libs. For a custom VNC client, set PROJECT to a string\n      that stars with Custom and contains Vnc, i.e. `CustomYourVncClient` (see III below for details).\n\n    - Set the environment variables ANDROID_SDK to your SDK installation. The scripts will install the NDK automatically.\n\n    - Example:\n\n              export PROJECT=libs # or CustomSomethingOrOther\n              export ANDROID_SDK=${HOME}/Android/Sdk\n              export PATH=$PATH:${ANDROID_SDK}/platform-tools/\n              export PATH=$PATH:${ANDROID_SDK}/tools\n\n    - Accept all licenses (repeat if you see an error during build)\n\n              ${ANDROID_SDK}/cmdline-tools/bin/sdkmanager --licenses\n\n    - Then, run the build script which takes hours to run. E.g.:\n\n              ./bVNC/prepare_project.sh $PROJECT $ANDROID_SDK\n\n    - Switch to Android Studio, select the launch configuration you want to run, and run it on an emulator or device.\n\n    - If using an emulator, choose x86_64 as the architecture to avoid \"has text relocations\" errors loading gstreamer on Android.\n\n## On Windows with Git Bash\n\nThese instructions are for Windows without WSL2 installed. For now, only pre-build dependencies are\nsupported in this configuration.\n\n- First [download and install git from here](https://git-scm.com/downloads)\n- Then, start Git Bash, clone this project, cd into the project root directory and run:\n```bash\n./download-prebuilt-dependencies.sh\n```\n- Start Android Studio and open the project directory\n- Click File-\u003eSync Project with Gradle Files\n- If Android Studio reports any missing android versions (such as `android-28`, for instance),\nfind and start SDK Manager and ensure any missing Android versions are installed. As of today,\nthe required versions are `android-28`, `android-29`, and `android-30`, but in future other versions\nwill need to be installed if Android Studio shows an error.\n\n\n## II Importing projects into Android Studio\n\nThis should be as simple as selecting \"Open an existing Android Studio project\" on the\nWelcome screen, browsing to the remote-desktop-clients directory and selecting it.\n\n  - One final tweak is necessary to the (external) freeRDPCore project before\n    the project can build. Double-click \"Gradle Scripts\" on the left, and\n    open build.gradle (Module freeRDPCore). Change minSdkVersion to 11.\n\n  - Build -\u003e Make Project should now work.\n\n## Custom Certificate Authority\n\nYou can add custom CAs for aSPICE and Opaque in remoteClientLib/certificate_authorities/. They will be merged with the\nca-bundle.crt provided to the app to validate your self-signed server certs if you have any.\n\n## Generating Keyboard Layouts for aSPICE and Opaque\n\nThe directory `bVNC/layouts` contains a utiliy `convert.py` that can be used to generate new layouts for the desktop clients.\n\n```bash\nsudo apt install qemu-keymaps\ncd bVNC/layouts\npython3 ./convert.py\n```\n\nIf you would like to add a layout, the best way to do so would be to create a file with the correct format in\n`/usr/share/qemu/keymaps/`. Ideally, you should submit this file to the qemu project so everybody would be able to benefit\nfrom the new layout.\n\n\n## III Building \"Custom\" VNC clients\n\nIt is possible to programmatically build additional customized clients based on the VNC client contained in this project\nwithout altering any of the source code of the project.\n\n- Pick a unique identifier for your app. It will become part of the\n  (application ID)[https://developer.android.com/studio/build/application-id] of the app. For example,\n  say you pick YourVncClient. The application ID will be com.iiordanov.YourVncClient.\n\n- Place a configuration file in yaml format (note - with filename matching your resulting application ID) at\n  `bVNC/src/main/assets/com.iiordanov.YourVncClient.yaml`\n\n- Use the file `custom_vnc_client.yaml-EXAMPLE` as a starting point. The numbers after each field are one of\n  View.INVISIBLE or View.GONE and it controls whether the field is invisible or gone in the customized interface.\n\n- See [https://developer.android.com/reference/android/view/View.html#GONE] for the numeric value of View.GONE\n  and [https://developer.android.com/reference/android/view/View.html#INVISIBLE] for the numberic value of View.INVISIBLE.\n\n- Place an icon at `CustomVnc-app/src/main/res/drawable/icon_of_the_custom_app.png`.\n\n- Edit `gradle.properties` and set CUSTOM_VNC_APP_NAME to `Name Of The Custom App` and CUSTOM_VNC_APP_ICON to `icon_of_the_custom_app`\n\n- Follow the build procedure in I-a, I-b, or I-c above, but with the PROJECT environment variable set to anything that starts with\n  `Custom` and has `Vnc` in its name. For instance, if you set PROJECT to `CustomYourVncClient`. The `bVNC/prepare_project.sh` script\n  will strip \"Custom\" from that identifier and once the project is built will be com.iiordanov.YourVncClient.\n\n## Bugs\n\nPlease post any bugs you find at the GitHub issue tracker:\n\nhttps://github.com/iiordanov/remote-desktop-clients/issues\n\n## Support Forum\n\nQuestions and general discussion should be posted at the following forum:\n\nhttps://groups.google.com/forum/#!forum/bvnc-ardp-aspice-opaque-remote-desktop-clients\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiiordanov%2Fremote-desktop-clients","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiiordanov%2Fremote-desktop-clients","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiiordanov%2Fremote-desktop-clients/lists"}