{"id":17998429,"url":"https://github.com/kosaka-bun/honoka-android-utils","last_synced_at":"2025-04-03T03:10:12.078Z","repository":{"id":58779864,"uuid":"417761396","full_name":"kosaka-bun/honoka-android-utils","owner":"kosaka-bun","description":"Android开发实用工具包","archived":false,"fork":false,"pushed_at":"2024-06-23T11:27:57.000Z","size":130,"stargazers_count":230,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-24T07:57:14.506Z","etag":null,"topics":["android","dependency","gradle","java","kotlin","utilities"],"latest_commit_sha":null,"homepage":"","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/kosaka-bun.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":"2021-10-16T08:05:27.000Z","updated_at":"2024-12-01T05:50:51.000Z","dependencies_parsed_at":"2024-01-01T10:23:06.597Z","dependency_job_id":"49652234-7852-48d7-85ed-bccadf679f0e","html_url":"https://github.com/kosaka-bun/honoka-android-utils","commit_stats":null,"previous_names":["kosaka-bun/maven-repo"],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosaka-bun%2Fhonoka-android-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosaka-bun%2Fhonoka-android-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosaka-bun%2Fhonoka-android-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosaka-bun%2Fhonoka-android-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kosaka-bun","download_url":"https://codeload.github.com/kosaka-bun/honoka-android-utils/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246927835,"owners_count":20856198,"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":["android","dependency","gradle","java","kotlin","utilities"],"created_at":"2024-10-29T21:25:17.388Z","updated_at":"2025-04-03T03:10:12.052Z","avatar_url":"https://github.com/kosaka-bun.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Honoka Android Utils\n![Java](./docs/img/Java-8-brightgreen.svg)\n![Kotlin](https://img.shields.io/badge/Kotlin-1.8.0-brightgreen?logo=Kotlin)\u003cbr /\u003e\n[![License](https://img.shields.io/github/license/kosaka-bun/honoka-android-utils?label=License\u0026color=blue\u0026logo=GitHub)](./LICENSE)\n![GitHub Stars](https://img.shields.io/github/stars/kosaka-bun/honoka-android-utils?label=Stars\u0026logo=GitHub\u0026style=flat)\n[![Release](https://img.shields.io/github/release/kosaka-bun/honoka-android-utils?label=Release\u0026logo=GitHub)](../../releases)\n\n## 简介\nHonoka Android Utils是一款包含了各式各样实用工具的Android开发工具包。其针对Android基本组件（`ContentProvider`、`Service`）、OrmLite框架、Ktor Server、`WebView`等进行了高度封装，提供了许多默认实现和便捷的方法。引入本工具包的项目，能基于这些类，实现快速创建常用功能齐全的自定义`ContentProvider`与`Service`、快速创建基于某个实体类的SQLite DAO以读写SQLite中的对应数据表的数据、快速启动HTTP服务以对外提供访问应用内静态资源（assets）的接口及获取自定义动态数据的接口、快速创建具有全屏`WebView`且支持异步`JavascriptInterface`的`WebActivity`等功能。\n\n本项目采用Apache-2.0 License，使用本项目时，请遵守此开源许可证的相关规定。\n\n**本项目中的所有代码并未经过严格测试，请勿用于生产环境。**\n\n请参阅：[更新日志](./docs/changelog.md)\n\n## 功能展示\n### [BaseContentProvider](./aar/src/main/java/de/honoka/sdk/util/android/common/ContentProvider.kt)\n能基于`call`方法，实现与其他应用通过JSON数据进行通信的`ContentProvider`。继承该类时，仅需实现一个方法：\n```kotlin\n//JSON类来自于hutool，是JSONObject和JSONArray的父类\nabstract fun call(method: String?, args: JSON?): Any?\n```\n\n返回值类型可以是任何基本数据类型、`String`、任何实体类或任何实体类的集合（即任何能够被存放在`JSONObject`对象中的类型）。\n\n在一个应用中调用另一个应用提供的基于`BaseContentProvider`实现的`ContentProvider`时，可使用本工具包所提供的两个方法中的任意一个：\n```kotlin\n//返回值类型可能为JSONObject、JSONArray或基本数据类型\nfun ContentResolver.call(authority: String, method: String? = null, args: Any? = null): Any?\n\n//基于上述方法返回的值，尝试将其转换为指定类型的实体类或集合\ninline fun \u003creified T\u003e ContentResolver.typedCall(\n    authority: String, method: String? = null, args: Any? = null\n): T\n```\n\n**注：基于`BaseContentProvider`实现的`ContentProvider`仍需在`AndroidManifest.xml`中注册。**\n\n### [BaseDao\u0026lt;T\u0026gt;](./aar/src/main/java/de/honoka/sdk/util/android/database/BaseDao.kt)\n基于OrmLite封装了常用CRUD方法的基础DAO类，支持自动建库建表（单库单表，一个`.db`文件中只包含一张表）、自动升级降级数据表、基于OrmLite的`QueryBuilder\u003cT, ID\u003e`编写查询DSL等功能。\n\n要使用`BaseDao\u003cT\u003e`，需先按以下示例创建一个实体类：\n```kotlin\nimport com.j256.ormlite.field.DatabaseField\nimport com.j256.ormlite.table.DatabaseTable\nimport de.honoka.sdk.util.android.database.Table\n\n/*\n * @Table(version = 1)代表该实体类所对应的.db文件（单库单表）中的数据库的版本，若该实体类所对应\n * 的BaseDao的子类在被初始化时，检测到应用数据目录中的该实体类所对应的.db文件与此处定义的版本不符，\n * 则触发数据表的自动升级降级。\n */\n@Table(version = 1)\n@DatabaseTable(tableName = \"some_entity\")\ndata class SomeEntity(\n\n    @DatabaseField(id = true)\n    var id: String? = null,\n\n    @DatabaseField\n    var name: String? = null,\n\n    @DatabaseField\n    var enabled: Boolean? = null\n)\n```\n\n然后创建一个`object`类（Kotlin中的单例对象），继承`BaseDao`，将此类作为泛型和`Class`对象传入：\n```kotlin\nobject SomeEntityDao : BaseDao\u003cSomeEntity\u003e(SomeEntity::class.java)\n```\n\n在任何一个地方首次调用`SomeEntityDao`中的任何成员（包括继承的成员）时，其所继承的来自`BaseDao`中的成员才会被初始化，此时才可能会触发数据表的升级或降级。\n\n若想在应用启动时就初始化所有`BaseDao`的子类，可在项目中创建任意一个继承`AbstractAndroidDatabaseUtils`类的自定义子类，并在实现抽象属性`daoInstances`时，引用每一个需要被初始化的`BaseDao`的子类，并在应用启动时即调用该子类的`initDaoInstances()`方法。\n\n### [AbstractWebActivity](./aar/src/main/java/de/honoka/sdk/util/android/ui/WebActivity.kt)\n仅包含一个全屏`WebView`的`Activity`的子类，其中包含了针对网页触发的全局全屏（可使状态栏隐藏的全屏，通常由网页中的视频播放器触发）的默认实现、全局全屏（横屏）时的重力感应旋屏、返回键触发网页后退、将`Activity`事件传递到`WebView`中的JavaScript层的实现、自动注册多个包含`JavascriptInterface`或`AsyncJavascriptInterface`的对象等功能。\n\n要使用`AbstractWebActivity`，可选择直接使用`DefaultWebActivity`，或继承`AbstractWebActivity`创建一个自定义的`Activity`，然后实现抽象属性`definedJsInterfaceInstances`，传入包含`JavascriptInterface`方法的一个或多个类的实例列表，例如：\n\n```kotlin\nclass WebActivity : AbstractWebActivity() {\n\n    override val definedJsInterfaceInstances: List\u003cAny\u003e = listOf(\n        AnyJsInterface()\n    )\n\n    override fun extendedOnResume() {\n        //需要在onResume方法被调用时执行的额外操作\n    }\n}\n```\n\n有关`AsyncJavascriptInterface`方法的实现原理，请参考源代码。\n\n### [HttpServer](./aar/src/main/java/de/honoka/sdk/util/android/server/HttpServer.kt)\n基于Ktor框架实现的HTTP服务，能使应用具有监听端口，对外提供HTTP服务的功能。\n\n要使应用启动一个HTTP服务，只需直接调用`HttpServer.createInstance()`即可。`HttpServer`所监听的默认端口为`38081`，服务启动前将会检测端口占用情况，若端口被占用，则自动依次按端口号向下寻找可用的端口号，最多寻找10个端口号。若希望更改默认端口号，仅需在调用`createInstance()`前，修改`HttpServerVariables.serverPort`的值即可。\n\n默认情况下，`HttpServer`仅提供静态资源服务，包含以下URL与静态资源的映射:\n\n|            URL             |            静态资源            |\n|:--------------------------:|:--------------------------:|\n| `/`、`/index.html`、任何未定义的路由 | `[assets]/web/index.html`  |\n|        `/assets/**`        |  `[assets]/web/assets/**`  |\n|         `/font/**`         |   `[assets]/web/font/**`   |\n|         `/img/**`          |   `[assets]/web/img/**`    |\n|          `/js/**`          |    `[assets]/web/js/**`    |\n|       `/favicon.ico`       | `[assets]/web/favicon.ico` |\n|     `/android/img/**`      | `[Application.dataDir]/**` |\n\n要添加自定义路由及其处理逻辑，可在调用`createInstance()`前，为`customRoutingList`变量重新赋值一个包含自定义路由定义的`List`。\n\n`customRoutingList`中的成员均为`io.ktor.server.routing.Routing`类的扩展函数，请参考Ktor官方文档了解如何基于编写`Routing`的扩展函数的方式，编写自定义路由的处理逻辑。\n\n### 更多实用工具\n请阅读源代码以了解更多实用工具类的功能。\n\n## 使用\n本项目部署于：\n\n[![maven-repo](https://github-readme-stats.vercel.app/api/pin/?username=kosaka-bun\u0026repo=maven-repo)](https://github.com/kosaka-bun/maven-repo)\n\n使用前请先阅读此仓库的文档，为你的Gradle添加依赖仓库。\n\n项目的各个版本号请前往[Releases](../../releases)查看。\n\n### Gradle\n#### Groovy DSL\n```groovy\ndependencies {\n    implementation 'de.honoka.sdk:honoka-android-utils:版本号'\n}\n```\n\n#### Kotlin DSL\n```kotlin\ndependencies {\n    implementation(\"de.honoka.sdk:honoka-android-utils:版本号\")\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkosaka-bun%2Fhonoka-android-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkosaka-bun%2Fhonoka-android-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkosaka-bun%2Fhonoka-android-utils/lists"}