如题,目前只知道某些项目如JAVA和kotlin貌似可以直接打包成apk,但不知道具体怎样?比如某项目缺少什么文件或文件夹就不行,那么请问这些文件/文件夹是什么?是否能够自己解决?如果可行那么是否有化繁为简的方式?
接下来打包成apk还要签名,这用软件可以解决,但能否有可靠又免费的签名方式,就是安装时系统不会有安全问题提醒,就是像一般软件正常安装一样,
如题,目前只知道某些项目如JAVA和kotlin貌似可以直接打包成apk,但不知道具体怎样?比如某项目缺少什么文件或文件夹就不行,那么请问这些文件/文件夹是什么?是否能够自己解决?如果可行那么是否有化繁为简的方式?
接下来打包成apk还要签名,这用软件可以解决,但能否有可靠又免费的签名方式,就是安装时系统不会有安全问题提醒,就是像一般软件正常安装一样,
这种问题很复杂的,一般没有通解,需要结合具体情况分析。
您可以举一个具体的例子。
还有这种只有发布版本却没有下载资源的:
“直接打包成apk”这个说法就怪怪的…
不是打包,是将源代码编译成可执行文件。为安卓手机开发的软件,自然就能编译成apk
你的问题实在过于空了,没法回答
怎么编译
每个项目都有不同的要求。需要阅读readme和相关文档
比如某项目缺少什么文件或文件夹就不行,那么请问这些文件/文件夹是什么?
同上。具体看编译时的报错
是否能够自己解决?
具体到每一个人无法分析。有的人自己就可以写一个系统内核,自己写驱动,缺什么都自己写。
如果可行那么是否有化繁为简的方式?
找作者给你发一个
可靠又免费的签名方式
安卓签名没什么要求,自己随便新建,不需要购买。
安装时系统不会有安全问题提醒
原生系统只要有签名就可以,个人建的签名也不会提示,只会在升级时会要求签名一致才能覆盖安装。但具体得看手机设备厂家,还是要具体分析。国内厂家的话,无法保证,除非你上架它们的应用商店
介绍里写了啊:
所以安卓apk应该去Android版的仓库下载!
前端仓库!!又不是安卓应用,怎么编译成apk???
前端你理解成网页就行了
第一个项目(Winnie0408/SaltPlayerConverterFrontEnd),在 README 里面作者已经给出了比较详细的使用方法介绍,但需要一定的命令行基础。您可以试着学学。
第二个项目(guoq1/MagnetPlayer),上次更新已是 7 年前,而且看 issue 中的讨论,作者应该是没有意向提供 apk 文件,推测作者已经放弃该项目,该项目大概率不完善,而且其使用的各种技术可能已经过时,在当今的 Android 系统上可能无法正常运行。建议您放弃。
不是安卓软件…
docker用的
唉……
真小白呀 ![]()
我也是这么过来的
编译apk这个,其实属于会者不难,难者不会…大部分都是一样的套路
找几个有详细构建说明的,你自己按步骤做,然后就能通过实践学会怎么做了。
对于安卓软件,用Android Studio打开项目文件夹,然后 Build → Generate Signed APK 按着提示做就行了…遇到问题再去搜解决方法
插问个问题,本人之前没搞过android开发,想问一下,android编译是只能用android studio来做么?有没有apk编译的docker镜像,可以在服务器上做编译?
有的 GitHub action 都能跑。
蛙知道github action 用的 apk编译的镜像是啥么?或者给个链接指个路?想抽时间在服务器上试试 apk 编译的
比如:
注意我没实际测试过(毕竟不是开发者,但我从 action 中下载过 apk
多谢,我抽空研究下这个(可能得过一段时间,最近超级忙。。
不急 ![]()
一般来说,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
运行时自己输入必要的就行:

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