{"id":18851117,"url":"https://github.com/ototadana/tydrone-android","last_synced_at":"2025-07-29T09:36:00.213Z","repository":{"id":50540675,"uuid":"519374672","full_name":"ototadana/tydrone-android","owner":"ototadana","description":"Unity Plugin for Android Application to use Tello Low-Level Protocol","archived":false,"fork":false,"pushed_at":"2023-01-01T11:01:10.000Z","size":382,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-30T16:32:26.672Z","etag":null,"topics":["metaquest","tello"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ototadana.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":"2022-07-29T23:39:33.000Z","updated_at":"2023-11-03T13:12:32.000Z","dependencies_parsed_at":"2023-01-31T22:01:42.174Z","dependency_job_id":null,"html_url":"https://github.com/ototadana/tydrone-android","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ototadana%2Ftydrone-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ototadana%2Ftydrone-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ototadana%2Ftydrone-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ototadana%2Ftydrone-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ototadana","download_url":"https://codeload.github.com/ototadana/tydrone-android/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239787903,"owners_count":19697105,"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","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":["metaquest","tello"],"created_at":"2024-11-08T03:33:35.711Z","updated_at":"2025-02-20T06:24:56.414Z","avatar_url":"https://github.com/ototadana.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tydrone-android-plugin\n\nUnity Plugin for Android Application to\nuse [Tello Low-Level Protocol](https://tellopilots.com/wiki/protocol/).\n\nThis is for running [tello-llp-wrapper](https://github.com/ototadana/tello-llp-wrapper) on android\ndevices.\n\n## Requirement\n\nAndroid 10. This plugin has been tested with Meta Quest 2 and Meta Quest Pro.\n\n## Setup\n\n1. Download `tello-llp-wrapper-1.1.2.jar`\n   from [this page](https://github.com/ototadana/tello-llp-wrapper/releases).\n2. Copy `tello-llp-wrapper-1.1.2.jar` to the `./tydrone-android-plugin/libs` folder. If the folder\n   does not exist, create it.\n3. Download [javacv-platform-1.5.8-bin.zip](https://github.com/bytedeco/javacv/releases/tag/1.5.8)\n4. Create a small jar file using a script like the following:\n   ```shell\n   # unzip the downloaded file\n   unzip javacv-platform-1.5.8-bin.zip\n\n   # cd to the destination folder of the zip file\n   cd javacv-platform-1.5.8-bin\n\n   # create a working directory\n   mkdir tmp\n\n   # copy important files\n   cp LICENSE.txt tmp\n   cp README.md tmp\n   cp CHANGELOG.md tmp\n\n   # extract jar files to the tmp directory\n   cd tmp\n   jar xf ../ffmpeg.jar\n   jar xf ../ffmpeg-android-arm64.jar\n   jar xf ../javacpp.jar\n   jar xf ../javacpp-android-arm64.jar\n   jar xf ../javacv.jar\n   jar xf ../openblas.jar\n   jar xf ../openblas-android-arm64.jar\n   jar xf ../opencv.jar\n   jar xf ../opencv-android-arm64.jar\n\n   # remove some files to avoid build errors\n   rm -fr META-INF/versions\n   rm -fr META-INF/native-image\n   \n   # create jar file\n   jar cf javacv-1.5.8.jar *\n   ```\n5. Copy the created jar file to the `./tydrone-android-plugin/libs` folder.\n6. Copy `classes.jar` from Unity to the `./tydrone-android-plugin/dev-libs` folder.\n7. Build **tydrone-android-plugin** module.\n8. Copy `./tydrone-android-plugin/build/outputs/aar/tydrone-android-plugin-*.aar`\n   to `Assets/Plugins/Android` folder of your Unity Project.\n\n## Usage\n\nThe [Facade interface of the tello-llp-wrapper](https://github.com/ototadana/tello-llp-wrapper#usage)\ncan be used in Unity scripts by creating a simple wrapper class like the following:\n\n```csharp\npublic class TyDroneAndroidPlugin\n{\n    private AndroidJavaObject tyDrone;\n\n    public TyDroneAndroidPlugin()\n    {\n        this.tyDrone = new AndroidJavaObject(\"com.xpfriend.tydrone.AndroidMain\");\n    }\n\n    public void EntryCommand(string command)\n    {\n        tyDrone.Call(\"entryCommand\", command);\n    }\n\n    public string GetNotice()\n    {\n        return tyDrone.Call\u003cstring\u003e(\"getNotice\");\n    }\n\n    public string GetSentCommand()\n    {\n        return tyDrone.Call\u003cstring\u003e(\"getSentCommand\");\n    }\n\n    public string GetStates()\n    {\n        return tyDrone.Call\u003cstring\u003e(\"getStates\");\n    }\n\n    public bool IsRecording()\n    {\n        return tyDrone.Call\u003cbool\u003e(\"isRecording\");\n    }\n\n    public byte[] PickImage()\n    {\n        AndroidJavaObject obj = this.tyDrone.Call\u003cAndroidJavaObject\u003e(\"pickImage\");\n        if (obj == null || obj.GetRawObject() == null)\n        {\n            return new byte[] { };\n        }\n\n        sbyte[] image = AndroidJNIHelper.ConvertFromJNIArray\u003csbyte[]\u003e(obj.GetRawObject());\n        if (image == null)\n        {\n            return new byte[] { };\n        }\n        return (byte[])(Array)image;\n    }\n\n    public void SetRecording(bool value)\n    {\n        this.tyDrone.Call(\"setRecording\", value);\n    }\n\n    public void Run()\n    {\n        this.tyDrone.Call(\"run\");\n    }\n}\n```\n\nFor example, you can apply the video image obtained from Tello to Texture2D as follows:\n\n```csharp\nbyte[] bytes = tyDrone.PickImage();\nif (bytes.Length == 0)\n{\n   return;\n}\n\nTexture2D texture = new Texture2D(960, 720, TextureFormat.RGB24, false);\ntexture.LoadRawTextureData(bytes);\ntexture.Apply();\n```\n\nSee [README.md of the tello-llp-wrapper](https://github.com/ototadana/tello-llp-wrapper) for\ninformation on the use of other methods.\n\n## License\n\nThis software is released under the MIT License, see [LICENSE](./LICENSE).\n\nFor dependent software licenses, see:\n\n- https://github.com/ototadana/tello-llp-wrapper\n- https://github.com/bytedeco/javacv","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fototadana%2Ftydrone-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fototadana%2Ftydrone-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fototadana%2Ftydrone-android/lists"}