{"id":18859404,"url":"https://github.com/tuarua/frekotlin-android-ane","last_synced_at":"2025-04-14T12:14:07.590Z","repository":{"id":55499458,"uuid":"99284362","full_name":"tuarua/FreKotlin-Android-ANE","owner":"tuarua","description":"Example Air Native Extension written in Kotlin 1.6 for Android","archived":false,"fork":false,"pushed_at":"2023-01-14T17:56:12.000Z","size":86503,"stargazers_count":16,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-14T12:14:02.367Z","etag":null,"topics":["adobe-air","air-native-extensions","android","ane","kotlin-android"],"latest_commit_sha":null,"homepage":"","language":"ActionScript","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/tuarua.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-08-03T23:52:33.000Z","updated_at":"2024-02-12T03:24:53.000Z","dependencies_parsed_at":"2023-02-09T20:15:55.869Z","dependency_job_id":null,"html_url":"https://github.com/tuarua/FreKotlin-Android-ANE","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/tuarua%2FFreKotlin-Android-ANE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreKotlin-Android-ANE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreKotlin-Android-ANE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreKotlin-Android-ANE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tuarua","download_url":"https://codeload.github.com/tuarua/FreKotlin-Android-ANE/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248877960,"owners_count":21176244,"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":["adobe-air","air-native-extensions","android","ane","kotlin-android"],"created_at":"2024-11-08T04:17:40.242Z","updated_at":"2025-04-14T12:14:07.562Z","avatar_url":"https://github.com/tuarua.png","language":"ActionScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FreKotlin\n\nExample Android Studio project showing how to create Air Native Extensions for Android using Kotlin.  \n  \nThis project is used as the basis for the following ANEs   \n[Google Maps ANE](https://github.com/tuarua/Google-Maps-ANE)   \n[AdMob ANE](https://github.com/tuarua/AdMob-ANE)  \n[WebViewANE](https://github.com/tuarua/WebViewANE)  \n[FirebaseANE](https://github.com/tuarua/Firebase-ANE)  \n[ZipANE](https://github.com/tuarua/Zip-ANE)  \n\n-------------\n  \n\n### Getting Started\n\nA basic Hello World [starter project](/starter_project) is included \n\n\n### How to use \n###### Converting from FREObject args into Kotlin types, returning FREObjects\nThe following table shows the primitive as3 types which can easily be converted to/from Kotlin types\n\n\n| AS3 type | Kotlin type | AS3 param-\u003eKotlin | return Kotlin-\u003eAS3 |\n|:--------:|:--------:|:--------------|:-----------|\n| String | String | `val s = String(argv[0])` | `return s.toFREObject()`|\n| int | Int | `val i = Int(argv[0])` | `return i.toFREObject()`|\n| Boolean | Boolean | `val b = Boolean(argv[0])` | `return b.toFREObject()`|\n| Number | Double | `val d = Double(argv[0])` | `return d.toFREObject()`|\n| Number | Float | `val fl = Float(argv[0])` | `return fl.toFREObject()`|\n| Date | Date | `val dt = Date(argv[0])` | `return dt.toFREObject()`|\n| Rectangle | Rect | `val r = Rect(argv[0])` | `return r.toFREObject()`|\n| Rectangle | RectF | `val r = RectF(argv[0])` | `return r.toFREObject()`|\n| Point | Point | `val pnt = Point(argv[0])` | `return pnt.toFREObject()`|\n| Point | PointF | `val pnt = PointF(argv[0])` | `return pnt.toFREObject()`|\n| Vector Int | IntArray | `val arr = IntArray(argv[0])` | `return arr.toFREObject()`|\n| Vector Boolean | BooleanArray | `val arr = BooleanArray(argv[0])` | `return arr.toFREObject()`|\n| Vector Number | DoubleArray | `val arr = DoubleArray(argv[0])` | `return arr.toFREObject()`|\n| Vector String | List | `val al = List\u003cString\u003e(argv[0])` | `return al.toFREObject()`|\n| Object | Map\u003cString, Any\u003e? | `val dict: Map\u003cString, Any\u003e? = Map(argv[0])` | |\n| null | null | | return null |\n\n\n#### Basic Types\n\n```kotlin\nval myString: String? = String(argv[0])\nval myInt = Int(argv[1])\nval myBool = Boolean(argv[2])\n\nval kotlinString = \"I am a string from Kotlin\"\nreturn kotlinString.toFREObject()\n```\n\n#### Creating new FREObjects\n\n```kotlin\nval newPerson = FREObject(\"com.tuarua.Person\")\n\n// create a FREObject passing args\n// \n// The following param types are allowed: \n// String, Int, Double, Float, Long, Short, Boolean, Date, FREObject\nval frePerson = FREObject(\"com.tuarua.Person\", \"Bob\", \"Doe\", 28, myFREObject)\n```\n\n#### Calling Methods\n\n```kotlin\n// call a FREObject method passing args\n// \n// The following param types are allowed: \n// String, Int, Double, Float, Long, Short, Boolean, Date, FREObject\nval addition = freCalculator.call(\"add\", 100, 31)\n```\n\n#### Getting / Setting Properties\n\n```kotlin\nval oldAge = Int(person[\"age\"])\nval newAge = oldAge + 10\n\n// Set property using braces access\nperson[\"age\"] = newAge\n```\n\n#### Arrays\n\n```kotlin\nval airArray: FREArray? = FREArray(argv[0])\n// convert to a Kotlin List\u003cString\u003e\nval airStringVector = List\u003cString\u003e(argv[0])\n\n// create a Vector.\u003ccom.tuarua.Person\u003e with fixed length of 5\nval newFreArray = FREArray(\"com.tuarua.Person\", 5, true)\nval len = newFreArray.length\n\n// loop over FREArray\nfor (fre: FREObject? in airArray) {\n    trace(Int(fre))\n}\n\n// set element 0 to 123\nairArray[0] = 123\n\n// append element FREArray\nairArray.push(456)\n\n// return Kotlin IntArray to AIR\nval kotArr = intArrayOf(99, 98, 92, 97, 95)\nreturn kotArr.toFREArray()\n```\n\n#### Sending Events back to AIR\n\n```kotlin\ntrace(\"Hi\", \"There\")\n\n// with interpolation\ntrace(\"My name is: $name\")\n\ndispatchEvent(\"MY_EVENT\", \"this is a test\")\n```\n\n#### Bitmapdata\n\n```kotlin\nval icon: Bitmap? = Bitmap(argv[0])\nreturn icon.toFREObject()\n```\n\n#### ByteArrays\n\n```kotlin\nval byteArray = ByteArray(argv[0])\nif (byteArray != null) {\n    val str = String(Base64.encode(byteArray, Base64.NO_WRAP), Charset.forName(\"utf-8\"))\n}\n```\n\n#### Error Handling\n\n```kotlin\nFreKotlinLogger.context = this.context\nif (inFRE1.type != FreObjectTypeKotlin.INT) {\n    return FreException(\"Oops, we expected the FREObject to be passed as an int but it's not\").getError();\n}\n```\n\n\nAdvanced Example - Extending. Convert to/from LatLng\n```kotlin\npackage com.tuarua.frekotlin\n\nimport com.adobe.fre.FREObject\nimport com.google.android.gms.maps.model.LatLng\n\nfun LatLng(freObject: FREObject?): LatLng {\n    return LatLng(Double(freObject[\"latitude\"]) ?: 0.0,\n            Double(freObject[\"longitude\"]) ?: 0.0)\n}\n\nfun LatLng.toFREObject(): FREObject? {\n    return FREObject(\"com.tuarua.googlemaps.Coordinate\", this.latitude, this.longitude)\n}\n```\n\n### Prerequisites\n\nYou will need\n\n- Android Studio 2022+\n- IntelliJ IDEA\n- AIR 50.1+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuarua%2Ffrekotlin-android-ane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftuarua%2Ffrekotlin-android-ane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuarua%2Ffrekotlin-android-ane/lists"}