# 小白问github项目哪些可以直接打包成apk

**URL:** <https://meta.appinn.net/t/topic/69855>\
**Category:** 问题求助\
**Tags:** android, 开源项目\
**Created:** [2025 年4 月 8 日 07:09 UTC](https://meta.appinn.net/t/topic/69855 "2025-04-08T07:09:21Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

作者： ![oldsento](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/oldsento/32/58815_2.png) [@oldsento](https://meta.appinn.net/u/oldsento)\
发布日期： [2025 年4 月 8 日 07:09 UTC](https://meta.appinn.net/t/topic/69855/1 "2025-04-08T07:09:21Z")

</div>

如题，目前只知道某些项目如JAVA和kotlin貌似可以直接打包成apk，但不知道具体怎样？比如某项目缺少什么文件或文件夹就不行，那么请问这些文件/文件夹是什么？是否能够自己解决？如果可行那么是否有化繁为简的方式？

接下来打包成apk还要签名，这用软件可以解决，但能否有可靠又免费的签名方式，就是安装时系统不会有安全问题提醒，就是像一般软件正常安装一样，

---

<div class="post-metadata">

作者： ![VictoryRoad](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/victoryroad/32/58964_2.png) [@VictoryRoad](https://meta.appinn.net/u/VictoryRoad)\
发布日期： [2025 年4 月 8 日 07:23 UTC](https://meta.appinn.net/t/topic/69855/2 "2025-04-08T07:23:12Z")

</div>

这种问题很复杂的，一般没有通解，需要结合具体情况分析。

您可以举一个具体的例子。

---

<div class="post-metadata">

作者： ![oldsento](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/oldsento/32/58815_2.png) [@oldsento](https://meta.appinn.net/u/oldsento)\
发布日期： [2025 年4 月 8 日 07:42 UTC](https://meta.appinn.net/t/topic/69855/3 "2025-04-08T07:42:44Z")

</div>

> **[GitHub - Winnie0408/SaltPlayerConverter: 从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单格式，完成歌单的导入操作...](https://github.com/Winnie0408/SaltPlayerConverter)**
>
> 从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单格式，完成歌单的导入操作，方便用户快速跨平台迁移歌单。From online music platforms such as NetEase Cloud Music, QQ Music, etc., get the song list and convert it to Salt Player recognisable song list format, complete the import operation of the song list, which is convenient for users to migrate the song list quickly and cross-platform.

还有这种只有发布版本却没有下载资源的：

> **[GitHub - Winnie0408/SaltPlayerConverterFrontEnd: 前后端重构版：前端仓库。从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单...](https://github.com/Winnie0408/SaltPlayerConverterFrontEnd)**
>
> 前后端重构版：前端仓库。从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单格式，方便用户快速跨平台迁移歌单。Refactored version: front-end repository. From online music platforms such as NetEase Cloud Music, QQ Music, etc., get the song list and convert it to Salt Player recognisable song list format, which is convenient for users to migrate the song list quickly and cross-platform.

---

<div class="post-metadata">

作者： ![oldsento](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/oldsento/32/58815_2.png) [@oldsento](https://meta.appinn.net/u/oldsento)\
发布日期： [2025 年4 月 8 日 07:49 UTC](https://meta.appinn.net/t/topic/69855/4 "2025-04-08T07:49:17Z")

</div>

> **[GitHub - guoq1/MagnetPlayer: 磁链搜索，了解磁链原理和使用，资源搜索必备神器](https://github.com/guoq1/MagnetPlayer)**
>
> 磁链搜索，了解磁链原理和使用，资源搜索必备神器

---

<div class="post-metadata">

作者： ![shadows](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/shadows/32/17001_2.png) [@shadows](https://meta.appinn.net/u/shadows)\
发布日期： [2025 年4 月 8 日 07:52 UTC](https://meta.appinn.net/t/topic/69855/5 "2025-04-08T07:52:36Z")

</div>

“直接打包成apk”这个说法就怪怪的…  
不是打包，是将源代码编译成可执行文件。为安卓手机开发的软件，自然就能编译成apk

你的问题实在过于空了，没法回答

> 怎么编译

每个项目都有不同的要求。需要阅读readme和相关文档

> 比如某项目缺少什么文件或文件夹就不行，那么请问这些文件/文件夹是什么？

同上。具体看编译时的报错

> 是否能够自己解决？

具体到每一个人无法分析。有的人自己就可以写一个系统内核，自己写驱动，缺什么都自己写。

> 如果可行那么是否有化繁为简的方式？

找作者给你发一个

> 可靠又免费的签名方式

安卓签名没什么要求，自己随便新建，不需要购买。

> 安装时系统不会有安全问题提醒

原生系统只要有签名就可以，个人建的签名也不会提示，只会在升级时会要求签名一致才能覆盖安装。但具体得看手机设备厂家，还是要具体分析。国内厂家的话，无法保证，除非你上架它们的应用商店

---

<div class="post-metadata">

作者： ![shadows](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/shadows/32/17001_2.png) [@shadows](https://meta.appinn.net/u/shadows)\
发布日期： [2025 年4 月 8 日 07:58 UTC](https://meta.appinn.net/t/topic/69855/6 "2025-04-08T07:58:08Z")

</div>

> **[GitHub - Winnie0408/SaltPlayerConverter: 从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单格式，完成歌单的导入操作...](https://github.com/Winnie0408/SaltPlayerConverter)**
>
> 从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单格式，完成歌单的导入操作，方便用户快速跨平台迁移歌单。From online music platforms such as NetEase Cloud Music, QQ Music, etc., get the song list and convert it to Salt Player recognisable song list format, complete the import operation of the song list, which is convenient for users to migrate the song list quickly and cross-platform.

介绍里写了啊：

- 重构版 前端仓库：[SaltPlayerConverterFrontEnd](https://github.com/Winnie0408/SaltPlayerConverterFrontEnd)
- 重构版 后端仓库：[SaltPlayerConverterBackEnd](https://github.com/Winnie0408/SaltPlayerConverterBackEnd)
- **Android版 仓库：[歌单无界](https://github.com/Winnie0408/LocalMusicHelper) 于2024年1月23日正式上线啦**

所以安卓apk应该去Android版的仓库下载！

> **[GitHub - Winnie0408/SaltPlayerConverterFrontEnd: 前后端重构版：前端仓库。从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单...](https://github.com/Winnie0408/SaltPlayerConverterFrontEnd)**
>
> 前后端重构版：前端仓库。从网易云音乐、QQ音乐等在线音乐平台，获取歌单，并转换成椒盐音乐可识别的歌单格式，方便用户快速跨平台迁移歌单。Refactored version: front-end repository. From online music platforms such as NetEase Cloud Music, QQ Music, etc., get the song list and convert it to Salt Player recognisable song list format, which is convenient for users to migrate the song list quickly and cross-platform.

前端仓库！！又不是安卓应用，怎么编译成apk？？？  
前端你理解成网页就行了

---

<div class="post-metadata">

作者： ![VictoryRoad](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/victoryroad/32/58964_2.png) [@VictoryRoad](https://meta.appinn.net/u/VictoryRoad)\
发布日期： [2025 年4 月 8 日 07:59 UTC](https://meta.appinn.net/t/topic/69855/7 "2025-04-08T07:59:03Z")

</div>

第一个项目（`Winnie0408/SaltPlayerConverterFrontEnd`），在 README 里面作者已经给出了比较详细的使用方法介绍，但需要一定的命令行基础。您可以试着学学。

第二个项目（`guoq1/MagnetPlayer`），上次更新已是 7 年前，而且看 issue 中的讨论，作者应该是没有意向提供 apk 文件，推测作者已经放弃该项目，该项目大概率不完善，而且其使用的各种技术可能已经过时，在当今的 Android 系统上可能无法正常运行。建议您放弃。

---

<div class="post-metadata">

作者： ![oldsento](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/oldsento/32/58815_2.png) [@oldsento](https://meta.appinn.net/u/oldsento)\
发布日期： [2025 年4 月 8 日 08:03 UTC](https://meta.appinn.net/t/topic/69855/8 "2025-04-08T08:03:14Z")

</div>

> **[Releases · entlaabstudio/rplayer](https://github.com/entlaabstudio/rplayer/releases)**
>
> A player that supports full decentralization. Ready for use on Web3 networks such as IPFS. It arose from the desire for a player that will respect the listening to music albums, not just individual...

---

<div class="post-metadata">

作者： ![shadows](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/shadows/32/17001_2.png) [@shadows](https://meta.appinn.net/u/shadows)\
发布日期： [2025 年4 月 8 日 08:04 UTC](https://meta.appinn.net/t/topic/69855/9 "2025-04-08T08:04:56Z")

</div>

不是安卓软件…  
docker用的

唉……

---

<div class="post-metadata">

作者： ![Qingwa](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/qingwa/32/58632_2.png) [@Qingwa](https://meta.appinn.net/u/Qingwa)\
发布日期： [2025 年4 月 8 日 08:19 UTC](https://meta.appinn.net/t/topic/69855/10 "2025-04-08T08:19:35Z")

</div>

真小白呀 :doge:

我也是这么过来的

---

<div class="post-metadata">

作者： ![shadows](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/shadows/32/17001_2.png) [@shadows](https://meta.appinn.net/u/shadows)\
发布日期： [2025 年4 月 8 日 08:37 UTC](https://meta.appinn.net/t/topic/69855/11 "2025-04-08T08:37:43Z")

</div>

编译apk这个，其实属于会者不难，难者不会…大部分都是一样的套路

找几个有详细构建说明的，你自己按步骤做，然后就能通过实践学会怎么做了。

对于安卓软件，用Android Studio打开项目文件夹，然后 _Build_ → _Generate Signed APK_ 按着提示做就行了…遇到问题再去搜解决方法

---

<div class="post-metadata">

作者： ![rtrobin](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/rtrobin/32/24942_2.png) [@rtrobin](https://meta.appinn.net/u/rtrobin)\
发布日期： [2025 年4 月 8 日 12:13 UTC](https://meta.appinn.net/t/topic/69855/12 "2025-04-08T12:13:10Z")

</div>

插问个问题，本人之前没搞过android开发，想问一下，android编译是只能用android studio来做么？有没有apk编译的docker镜像，可以在服务器上做编译？

---

<div class="post-metadata">

作者： ![Qingwa](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/qingwa/32/58632_2.png) [@Qingwa](https://meta.appinn.net/u/Qingwa)\
发布日期： [2025 年4 月 8 日 12:15 UTC](https://meta.appinn.net/t/topic/69855/13 "2025-04-08T12:15:54Z")

</div>

有的 GitHub action 都能跑。

---

<div class="post-metadata">

作者： ![rtrobin](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/rtrobin/32/24942_2.png) [@rtrobin](https://meta.appinn.net/u/rtrobin)\
发布日期： [2025 年4 月 8 日 12:21 UTC](https://meta.appinn.net/t/topic/69855/14 "2025-04-08T12:21:58Z")

</div>

蛙知道github action 用的 apk编译的镜像是啥么？或者给个链接指个路？想抽时间在服务器上试试 apk 编译的

---

<div class="post-metadata">

作者： ![Qingwa](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/qingwa/32/58632_2.png) [@Qingwa](https://meta.appinn.net/u/Qingwa)\
发布日期： [2025 年4 月 8 日 12:24 UTC](https://meta.appinn.net/t/topic/69855/15 "2025-04-08T12:24:59Z")

</div>

比如：

- [automated-build-android-app-with-github-action · Actions · GitHub Marketplace · GitHub](https://github.com/marketplace/actions/automated-build-android-app-with-github-action)

注意我没实际测试过（毕竟不是开发者，但我从 action 中下载过 apk

---

<div class="post-metadata">

作者： ![rtrobin](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/rtrobin/32/24942_2.png) [@rtrobin](https://meta.appinn.net/u/rtrobin)\
发布日期： [2025 年4 月 8 日 12:32 UTC](https://meta.appinn.net/t/topic/69855/16 "2025-04-08T12:32:18Z")

</div>

多谢，我抽空研究下这个（可能得过一段时间，最近超级忙。。

---

<div class="post-metadata">

作者： ![Qingwa](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/qingwa/32/58632_2.png) [@Qingwa](https://meta.appinn.net/u/Qingwa)\
发布日期： [2025 年4 月 8 日 12:36 UTC](https://meta.appinn.net/t/topic/69855/17 "2025-04-08T12:36:45Z")

</div>

不急 :joy:

---

<div class="post-metadata">

作者： ![oldsento](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/oldsento/32/58815_2.png) [@oldsento](https://meta.appinn.net/u/oldsento)\
发布日期： [2025 年4 月 8 日 13:21 UTC](https://meta.appinn.net/t/topic/69855/18 "2025-04-08T13:21:34Z")

</div>

> **[GitHub - Levi-Ackerman/ZxBrowser: 一个简介的浏览器程序, 仿照Via的做法, 使用Android自有WebView,持续更新中](https://github.com/Levi-Ackerman/ZxBrowser)**
>
> 一个简介的浏览器程序, 仿照Via的做法, 使用Android自有WebView,持续更新中

> **[GitHub - waloyodev/XBrowserApp: Forked from...](https://github.com/waloyodev/XBrowserApp)**
>
> Forked from https://github.com/mozilla-tw/FirefoxLite

> **[GitHub - weihongxi/XBrowser: a simple browser](https://github.com/weihongxi/XBrowser)**
>
> a simple browser

> **[GitHub - victoryckl/UBrowser: 从XBrowser继承过来，准备做个精简版](https://github.com/victoryckl/UBrowser)**
>
> 从XBrowser继承过来，准备做个精简版

---

<div class="post-metadata">

作者： ![shadows](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/shadows/32/17001_2.png) [@shadows](https://meta.appinn.net/u/shadows)\
发布日期： [2025 年4 月 8 日 14:09 UTC](https://meta.appinn.net/t/topic/69855/19 "2025-04-08T14:09:39Z")

</div>

一般来说，kotlin/java的安卓项目都是用Gradle工具来构建的，只需要环境安装好java和Android SDK，然后运行Gradle就好（常用命令`./gradlew assembleRelease`）。签名就麻烦点了，需要自己先创建好签名密钥文件，然后用Android SDK带的工具签名；或者根据项目文件配置，把密钥文件放到指定位置之类的……

推荐Android Studio是因为它能直接帮你准备好环境，不用自己输命令，都是图形化的，最容易上手

github action的workflow文件参考  
需要先在仓库secrets新建4个变量用于存储签名用的证书  
下面yaml文件的86~89行：  
`SIGN_FILE_BASE64`  
`KEY_ALIAS`  
`KEYSTORE_PASSWORD`  
`KEY_PASSWORD`  
详见[GitHub - ilharp/sign-android-release: A GitHub action to sign an APK or AAB](https://github.com/ilharp/sign-android-release?tab=readme-ov-file#inputs)  
运行时自己输入必要的就行：  
 ![image.png](https://h1.appinn.me/file/1744121367061_image.png)

```yaml
name: Build Apk

on: 
  workflow_dispatch:
    inputs:
      java_version:
        required: true
        default: '17'
      repo:
        required: true
      ref:
        required: false
        default: ''
      submodules:
        required: true
        default: 'false'
      gradle_version:
        required: false
        default: 'wrapper'
      build_command:
        required: true
        default: './gradlew assembleRelease'

jobs:
  gradle:
    name: Gradle CI Build
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          repository: ${{ github.event.inputs.repo }}
          ref: ${{ github.event.inputs.ref }}
          fetch-depth: 0 
          
      - name: Checkout submodules
        if: ${{ github.event.inputs.submodules != 'false' }}
        run: git submodule update --init --recursive

      - name: Prepare Java
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: ${{ github.event.inputs.java_version }}
          java-package: jdk+fx

# - uses: maxim-lobanov/setup-android-tools@v1
# with:
# packages: |
# platform-tools
# platforms;android-30
# build-tools;30.0.2
# ndk;22.1.7171670
# cache: true

      - name: Build
        uses: gradle/actions/setup-gradle@v4
        with:
          gradle-version: ${{ github.event.inputs.gradle_version }}

      - name: Build project
        run: |
          chmod +x gradlew | true
          ${{ github.event.inputs.build_command }}
          
      - name: "Get apk's path"
        id: get_files
        uses: actions/github-script@v7
        with:
          script: |
            const path = require('path');
            const globber = await glob.create('**/*.apk');
            const files = await globber.glob();
            if ( files.length > 0 ) {
              const file = files[0];
              core.exportVariable( 'apk_path', file );
              core.exportVariable( 'apk_dir', path.dirname(file) );
            } else {
              core.setFailed(`Action failed because no apk found`);
            }
      - name: Sign APK
        id: sign_app
        uses: ilharp/sign-android-release@nightly
        with:
          releaseDir: ${{ env.apk_dir }}
          signingKey: ${{ secrets.SIGN_FILE_BASE64 }}
          keyAlias: ${{ secrets.KEY_ALIAS }}
          keyStorePassword: ${{ secrets.KEYSTORE_PASSWORD }}
          keyPassword: ${{ secrets.KEY_PASSWORD }}
      - name: Get Apk Info
        id: apk
        run: |
          find ${{ env.apk_dir }} -type f -name '*.apk' ! -name "*-signed.apk" | sudo xargs -I {} rm -f {}
          file=$(find ${{ env.apk_dir }} -type f -name "*-signed.apk" -print | head -n 1)
          find $ANDROID_SDK_ROOT/cmdline-tools/ -type f -name apkanalyzer | sudo xargs -I {} ln -s {} /usr/bin/apkanalyzer
          echo "version_name=$(apkanalyzer manifest version-name $file)" >> "$GITHUB_OUTPUT"
          echo "version_code=$(apkanalyzer manifest version-code $file)" >> "$GITHUB_OUTPUT"
          echo "application_id=$(apkanalyzer manifest application-id $file)" >> "$GITHUB_OUTPUT"
      - name: upload artifact
        uses: actions/upload-artifact@v4
        if: success()
        with:
          name: ${{steps.apk.outputs.application_id}}_${{steps.apk.outputs.version_name}}_${{steps.apk.outputs.version_code}}
          path: ${{ env.apk_dir }}/*.apk

```

---

<div class="post-metadata">

作者： ![shadows](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/shadows/32/17001_2.png) [@shadows](https://meta.appinn.net/u/shadows)\
发布日期： [2025 年4 月 8 日 14:10 UTC](https://meta.appinn.net/t/topic/69855/20 "2025-04-08T14:10:18Z")

</div>

你自己研究吧，我又不是机器人给你自动回复……  
而且这种陈年老项目，啥东西都不全的，不知道得费多大劲

[下一页](https://meta.appinn.net/t/topic/69855.md?page=2)
