{"id":51040187,"url":"https://github.com/gameframex/com.gameframex.unity.android","last_synced_at":"2026-06-22T10:01:56.140Z","repository":{"id":360656835,"uuid":"1247401049","full_name":"GameFrameX/com.gameframex.unity.android","owner":"GameFrameX","description":"Unity Android build configuration system for GameFrameX. Auto-discovers AndroidBuildConfig.json files across the project and injects Maven repositories, Gradle dependencies, AndroidManifest entries, string resources, and localization during build.","archived":false,"fork":false,"pushed_at":"2026-05-27T09:14:18.000Z","size":101,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T11:16:05.566Z","etag":null,"topics":["android","android-build","androidmanifest","asset-delivery","build-configuration","csharp","game-development","gameframex","gradle","localization","maven","unity","unity-package","unity3d","upm"],"latest_commit_sha":null,"homepage":"https://gameframex.doc.alianblank.com","language":"C#","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/GameFrameX.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2026-05-23T09:06:44.000Z","updated_at":"2026-05-27T09:14:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GameFrameX/com.gameframex.unity.android","commit_stats":null,"previous_names":["gameframex/com.gameframex.unity.android"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/GameFrameX/com.gameframex.unity.android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GameFrameX","download_url":"https://codeload.github.com/GameFrameX/com.gameframex.unity.android/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameFrameX%2Fcom.gameframex.unity.android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34643624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-build","androidmanifest","asset-delivery","build-configuration","csharp","game-development","gameframex","gradle","localization","maven","unity","unity-package","unity3d","upm"],"created_at":"2026-06-22T10:01:50.330Z","updated_at":"2026-06-22T10:01:56.131Z","avatar_url":"https://github.com/GameFrameX.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n  \u003cimg src=\"https://download.alianblank.com/gameframex/gameframex_logo_320.png\" alt=\"GameFrameX Logo\" width=\"160\" /\u003e\n\n  # Game Frame X Android\n\n  [![Version](https://img.shields.io/github/v/release/GameFrameX/com.gameframex.unity.android?label=version)](https://github.com/GameFrameX/com.gameframex.unity.android/releases)\n  [![License](https://img.shields.io/github/license/GameFrameX/com.gameframex.unity.android?label=license)](https://github.com/GameFrameX/com.gameframex.unity.android/blob/main/LICENSE.md)\n  [![Documentation](https://img.shields.io/badge/documentation-docs-blue)](https://gameframex.doc.alianblank.com)\n\n  インディゲーム開発者向けオールインワンソリューション · インディ開発者の夢を支援\n\n  [ドキュメント](https://gameframex.doc.alianblank.com) · [クイックスタート](#クイックスタート)\n\n  [English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | **日本語** | [한국어](README.ko.md)\n\n\u003c/div\u003e\n\n---\n\n## プロジェクト概要\n\n汎用 Android ビルド自動設定システム。JSON データファイルで駆動し、プロジェクト内のすべての `AndroidBuildConfig.json` を自動検出して、ビルド時に Maven リポジトリ、Gradle 依存関係、AndroidManifest エントリ、string リソース、ローカライゼーションを注入します。\n\n主な機能：\n\n- **データ駆動**: SDK パッケージは JSON ファイルのみで C# コード不要\n- **マルチファイル対応**: プロジェクト内に任意の数の設定ファイルを配置可能\n- **任意の場所**: Unity が認識できる任意の場所に設定ファイルを配置\n- **自動マージと重複排除**: 複数の設定をキーベースで自動マージ・重複排除\n- **冪等性**: 複数回ビルドしても安全 — 既存のエントリはスキップ\n\n## クイックスタート\n\n### インストール\n\nUnity プロジェクトの `Packages/manifest.json` を編集し、`scopedRegistries` セクションを追加してください：\n\n```json\n{\n  \"scopedRegistries\": [\n    {\n      \"name\": \"GameFrameX\",\n      \"url\": \"https://gameframex.upm.alianblank.uk\",\n      \"scopes\": [\n        \"com.gameframex\"\n      ]\n    }\n  ],\n  \"dependencies\": {\n    \"com.gameframex.unity.android\": \"1.0.0\"\n  }\n}\n```\n\n`scopes` は、どのパッケージをこのレジストリから解決するかを制御します。`com.gameframex` で始まるパッケージのみがこのレジストリから取得されます。\n\n### 使用例\n\nプロジェクト内の任意の場所に `AndroidBuildConfig.json` ファイルを配置（例：`Assets/` や `Packages/` 下の任意のディレクトリ）：\n\n```json\n{\n  \"providerName\": \"My SDK\",\n  \"mavenRepositories\": [\n    { \"name\": \"MyRepo\", \"url\": \"https://maven.example.com/repository/\" }\n  ],\n  \"gradleWrapper\": {\n    \"distributionUrl\": \"https\\\\://services.gradle.org/distributions/gradle-8.4-bin.zip\"\n  },\n  \"gradleProperties\": {\n    \"android.useAndroidX\": \"true\",\n    \"org.gradle.jvmargs\": \"-Xmx4096m\"\n  },\n  \"fileCopies\": {\n    \"libs/your-sdk.aar\": \"launcher/libs/your-sdk.aar\"\n  },\n  \"directoryCopies\": {\n    \"jniLibs\": \"launcher/jniLibs\"\n  },\n  \"assetPacksEnabled\": true,\n  \"assetPacks\": [\n    {\n      \"name\": \"additional_assets\",\n      \"deliveryType\": \"install-time\",\n      \"streamingAssetsPath\": \"AdditionalAssets\"\n    }\n  ],\n  \"localizedStringResources\": {\n    \"zh-rCN\": {\n      \"app_name\": \"我的应用\"\n    },\n    \"ja\": {\n      \"app_name\": \"マイアプリ\"\n    }\n  },\n  \"launcher\": {\n    \"compileSdkVersion\": \"34\",\n    \"buildToolsVersion\": \"34.0.0\",\n    \"minSdkVersion\": \"24\",\n    \"targetSdkVersion\": \"34\",\n    \"applicationId\": \"com.example.demo\",\n    \"versionName\": \"1.0.0\",\n    \"dependencies\": [\n      { \"configuration\": \"implementation\", \"notation\": \"com.example:sdk-analytics:2.0.0\" }\n    ],\n    \"permissions\": [ \"android.permission.INTERNET\" ],\n    \"metaData\": [\n      { \"name\": \"com.example.APP_ID\", \"value\": \"your_app_id\" }\n    ],\n    \"applicationAttributes\": [\n      { \"name\": \"usesCleartextTraffic\", \"value\": \"true\" }\n    ],\n    \"signingConfig\": {\n      \"storeFile\": \"keystore/release.jks\",\n      \"storePassword\": \"your_store_password\",\n      \"keyAlias\": \"release\",\n      \"keyPassword\": \"your_key_password\"\n    },\n    \"stringResources\": {\n      \"app_name\": \"My App\",\n      \"facebook_app_id\": \"your_facebook_app_id\",\n      \"facebook_client_token\": \"your_facebook_client_token\",\n      \"facebook_app_scheme\": \"fb_your_facebook_app_id\"\n    },\n    \"resources\": {\n      \"string\": {\n        \"facebook_app_id\": {\n          \"value\": \"your_facebook_app_id\",\n          \"translatable\": \"false\"\n        }\n      },\n      \"integer\": {\n        \"max_retry_count\": \"3\"\n      },\n      \"color\": {\n        \"primary\": \"#FF5722\"\n      }\n    }\n  },\n  \"unityLibrary\": {\n    \"compileSdkVersion\": \"34\",\n    \"buildToolsVersion\": \"34.0.0\",\n    \"minSdkVersion\": \"24\",\n    \"targetSdkVersion\": \"34\",\n    \"dependencies\": [],\n    \"permissions\": [],\n    \"metaData\": [],\n    \"applicationAttributes\": [],\n    \"stringResources\": {},\n    \"resources\": {}\n  }\n}\n```\n\nすべてのフィールドは省略可能です。複数の設定ファイルを配置でき、内容は自動的にマージ・重複排除されます。\n\n### フィールド説明\n\n#### グローバルフィールド\n\n| フィールド | 型 | マージ戦略 | 説明 |\n|-----------|-----|-----------|------|\n| `providerName` | string | 後勝ち | 設定プロバイダ名、ビルドログでの識別にのみ使用 |\n| `mavenRepositories` | `[{name, url}]` | URL で重複排除 | Maven リポジトリリスト、ルート `settings.gradle` の `dependencyResolutionManagement.repositories` に注入 |\n| `gradleWrapper` | `{key: value}` | キーで上書き | `gradle-wrapper.properties` に注入するキーと値のペア |\n| `gradleProperties` | `{key: value}` | キーで上書き | `gradle.properties` に注入するキーと値のペア |\n| `fileCopies` | `{ソース: コピー先}` | ソースで上書き | ファイルコピーマップ。相対ソースは設定ファイルディレクトリから、相対コピー先は Gradle ルートから解決 |\n| `directoryCopies` | `{ソース: コピー先}` | ソースで上書き | ディレクトリコピーマップ。パス解決は `fileCopies` と同じ |\n| `assetPacksEnabled` | bool | 後勝ち | Google Play Asset Delivery 機能の有効化。デフォルト `false` |\n| `assetPacks` | `[{name, deliveryType, streamingAssetsPath}]` | name で重複排除 | Asset Pack 設定リスト。各パックは独立した Gradle サブプロジェクトになります |\n| `localizedStringResources` | `{locale: {key: value}}` | locale ごとにグループ化、各グループ内でキーごとに後勝ち | ローカライズされた string リソース、launcher の `res/values-\u003clocale\u003e/strings.xml` に注入 |\n\n#### モジュールフィールド（launcher / unityLibrary）\n\n| フィールド | 型 | マージ戦略 | 説明 |\n|-----------|-----|-----------|------|\n| `compileSdkVersion` | string | 最大値 | コンパイル SDK バージョン、`android {}` ブロックに注入 |\n| `buildToolsVersion` | string | 後勝ち | ビルドツールバージョン |\n| `minSdkVersion` | string | 最大値 | 最小 SDK バージョン |\n| `targetSdkVersion` | string | 最大値 | ターゲット SDK バージョン |\n| `applicationId` | string | 後勝ち | アプリケーションパッケージ名（launcher のみ有効） |\n| `versionName` | string | 後勝ち | バージョン名 |\n| `dependencies` | `[{configuration, notation}]` | `configuration:notation` で重複排除 | Gradle 依存関係リスト。`configuration` は `implementation`、`api` など |\n| `permissions` | `[string]` | 名前で重複排除 | AndroidManifest `\u003cuses-permission\u003e` エントリ |\n| `metaData` | `[{name, value}]` | name で重複排除 | AndroidManifest `\u003capplication\u003e` 下の `\u003cmeta-data\u003e` エントリ |\n| `applicationAttributes` | `[{name, value}]` | 名前で重複排除 | AndroidManifest `\u003capplication\u003e` タグの属性（`android:` プレフィックスなし） |\n| `signingConfig` | `{storeFile, storePassword, keyAlias, keyPassword}` | 後勝ち | 署名設定、`signingConfigs.release` と `buildTypes.release` に注入 |\n| `stringResources` | `{key: value}` | キーごとに後勝ち | （旧版）string リソース、`res/values/strings.xml` に注入。自動的に `resources.string` にマージ |\n| `resources` | `{type: {key: value/object}}` | type ごとにグループ化、各グループ内でキーごとに後勝ち | マルチタイプ values リソース、`res/values/strings.xml` に注入。下記「リソース値フォーマット」を参照 |\n\n## 設定リファレンス\n\n### リソース値フォーマット\n\n`resources` フィールドはネストされた辞書を使用します：外側のキー = XML 要素タイプ、内側のキー = リソース名、内側の値 = テキストまたはオブジェクト。\n\n**単純な文字列値**（追加の XML 属性なし）：\n```json\n\"resources\": {\n  \"string\": { \"app_name\": \"My App\" },\n  \"integer\": { \"max_retry_count\": \"3\" }\n}\n```\n出力：`\u003cstring name=\"app_name\"\u003eMy App\u003c/string\u003e` および `\u003cinteger name=\"max_retry_count\"\u003e3\u003c/integer\u003e`\n\n**オブジェクト値**（追加の XML 属性あり）：\n```json\n\"resources\": {\n  \"string\": {\n    \"facebook_app_id\": {\n      \"value\": \"724358863922328\",\n      \"translatable\": \"false\"\n    }\n  }\n}\n```\n出力：`\u003cstring name=\"facebook_app_id\" translatable=\"false\"\u003e724358863922328\u003c/string\u003e`\n\n**対応リソースタイプ**：`string`、`integer`、`bool`、`color`、`dimen`（その他の XML 要素タイプも直接使用可能）。\n\n**後方互換性**：`stringResources` は自動的に `resources.string` にマージされます。同じキーが両方に宣言されている場合、`resources` が優先されます。\n\n### stringResources よく使う Key\n\n| Key | SDK / サービス | 説明 |\n|-----|---------------|------|\n| `app_name` | Android | アプリケーション表示名（ホーム画面のアイコン名） |\n| `facebook_app_id` | Facebook SDK | Facebook アプリケーション ID |\n| `facebook_client_token` | Facebook SDK | Facebook クライアントトークン |\n| `facebook_app_scheme` | Facebook SDK | Facebook URL Scheme、形式：`fb` + facebook_app_id |\n| `google_app_id` | Google Services | Google アプリケーション ID（形式：`1:数値:android:ハッシュ`） |\n| `default_web_client_id` | Google Sign-In | OAuth 2.0 Web クライアント ID（`.apps.googleusercontent.com` で終わる） |\n| `firebase_database_url` | Firebase | Realtime Database URL |\n| `gcm_defaultSenderId` | Firebase Cloud Messaging | FCM 送信者 ID |\n| `project_id` | Firebase | Firebase プロジェクト ID |\n| `google_api_key` | Google | Google API Key（`AIzaSy` で始まる） |\n| `google_crash_reporting_api_key` | Firebase Crashlytics | Crash Reporting API Key |\n| `google_storage_bucket` | Firebase Storage | Cloud Storage Bucket（`プロジェクトID.appspot.com`） |\n\n\u003e 注：Google/Firebase 関連の key は通常 `google-services.json` の Gradle プラグインによって自動生成されます。Gradle プラグインが使用できない場合のみ `stringResources` で手動注入してください。\n\n### localizedStringResources\n\nローカライズされた string リソースは `launcher/src/main/res/values-\u003clocale\u003e/strings.xml` に注入されます。Android はデバイスの言語設定に基づいて適切なリソースファイルを自動的に選択し、一致する言語が見つからない場合は `res/values/strings.xml` にフォールバックします。\n\nほとんどのゲームでは `app_name` のみをローカライズすれば十分です。その他の SDK トークンや ID は言語に依存しないため、`stringResources` に配置してください。\n\n### Asset Pack deliveryType\n\n| 値 | 説明 | サイズ制限 |\n|----|------|-----------|\n| `install-time` | アプリのインストール時に一緒に配信 | パックあたり ≤ 150MB |\n| `fast-follow` | インストール後に自動的にバックグラウンドでダウンロード | パックあたり ≤ 150MB |\n| `on-demand` | アプリからのリクエスト時にダウンロード | パックあたり ≤ 150MB |\n\n### よく使う locale コード\n\n| locale | 言語 | locale | 言語 |\n|--------|------|--------|------|\n| `en` | English | `de` | Deutsch |\n| `zh-rCN` | 简体中文 | `fr` | Français |\n| `zh-rTW` | 繁體中文 | `es` | Español |\n| `ja` | 日本語 | `pt` | Português |\n| `ko` | 한국어 | `ru` | Русский |\n| `th` | ไทย | `ar` | العربية |\n| `vi` | Tiếng Việt | `tr` | Türkçe |\n| `id` | Bahasa Indonesia | | |\n\n## 依存関係\n\n- `com.gameframex.unity \u003e= 1.1.1`\n\n## 変更履歴\n\n詳細は [CHANGELOG.md](CHANGELOG.md) を参照してください。\n\n## ライセンス\n\n[Apache ライセンス 2.0](https://www.apache.org/licenses/LICENSE-2.0) の下で公開されています。詳細は [LICENSE.md](LICENSE.md) を参照してください。\n\nGameFrameX 組織およびその派生プロジェクトの著作権、商標、特許、その他の関連権利は、適用される法律および規則により保護されています。国家安全を脅かす、社会秩序を乱す、他人の合法的な権利を侵害するなど、法律で禁止されている活動に本プロジェクトを使用することは禁じられています。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameframex%2Fcom.gameframex.unity.android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgameframex%2Fcom.gameframex.unity.android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameframex%2Fcom.gameframex.unity.android/lists"}