07-Python编写安卓APK-使用BeeWare

主要参考官方教程教程 5 - 在移动设备上:安卓 - BeeWare Tutorial

1-创建并编译 Android 应用程序

1-1-创建模板

创建默认模板

1
briefcase new

创建完毕

1-2-下载安卓模板

移动到apk项目目录,告诉Briefcase以开发者(或 dev)模式启动项目:

1
cd apk
1
briefcase dev

弹出窗口

运行 create 命令,下载Android应用程序模板。

1
briefcase create android

下载中

安装完毕

然后使用 Briefcase 的 build 命令将其编译为 Android APK 应用程序文件

1
briefcase build android

下载中

出现错误

1
Error while building project.

错误如下

1
C:\Users\PatTi\Desktop\BeeWare\apk> briefcase build android [apk] Updating app metadata... Setting main module... done [apk] Building Android APK... Downloading the Android emulator... [=======================================] 100% Unzipping... platform-tools/sqlit Downloading https://services.gradle.org/distributions/gradle-8.2-bin.zip Exception in thread "main" javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:378) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:316) at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1351) at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(CertificateMessage.java:1226) at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(CertificateMessage.java:1169) at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:458) at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:201) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:589) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) at java.base/sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2940) at java.base/sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2849) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1948) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1610) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224) at org.gradle.wrapper.Download.downloadInternal(Download.java:66) at org.gradle.wrapper.Download.download(Download.java:51) at org.gradle.wrapper.Install$1.call(Install.java:62) at org.gradle.wrapper.Install$1.call(Install.java:48) at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69) at org.gradle.wrapper.Install.createDist(Install.java:48) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439) at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306) at java.base/sun.security.validator.Validator.validate(Validator.java:264) at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:132) at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1335) ... 26 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:148) at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:129) at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434) ... 31 more Building... errored Error while building project. Log saved to C:\Users\PatTi\Desktop\BeeWare\apk\logs\briefcase.2025_08_07-12_39_01.build.log

手动下载 Gradle 分发包

从Gradle官网Gradle Distributions手动下载 gradle-8.2-bin.zip,将其放入 Gradle 缓存目录:

1
C:\Users\PatTi\.gradle\wrapper\dists\gradle-8.2-bin\<随机哈希>\

再次运行后,仍然卡在一半 可以通过换源的方法

打开对应项目文件夹

打开build

打开apk

打开Android

打开gradle

修改build.gradle

添加其他源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
google()
mavenCentral()
// 替换为阿里云镜像源
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
// Gradle 插件仓库
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
// JCenter 仓库(兼容旧项目)
maven { url 'https://maven.aliyun.com/repository/jcenter' }
// 通用仓库(覆盖 Google + Central)
maven { url 'https://repo.huaweicloud.com/repository/maven' }
// 公共仓库(代理 Central)
maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public' }
// 清华大学镜像
maven { url 'https://mirrors.tuna.tsinghua.edu.cn/maven' }
// 中国科学技术大学镜像
maven { url 'https://mirrors.ustc.edu.cn/maven' }

完整部分如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
google()
mavenCentral()
// 替换为阿里云镜像源
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
// Gradle 插件仓库
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
// JCenter 仓库(兼容旧项目)
maven { url 'https://maven.aliyun.com/repository/jcenter' }
// 通用仓库(覆盖 Google + Central)
maven { url 'https://repo.huaweicloud.com/repository/maven' }
// 公共仓库(代理 Central)
maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public' }
// 清华大学镜像
maven { url 'https://mirrors.tuna.tsinghua.edu.cn/maven' }
// 中国科学技术大学镜像
maven { url 'https://mirrors.ustc.edu.cn/maven' }
}
dependencies {
classpath 'com.android.tools.build:gradle:8.2.1'
classpath 'com.chaquo.python:gradle:16.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
mavenCentral()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

再次运行,正常编译完成

输出文件在

1
build\beewareapk\android\gradle\app\build\outputs\apk\debug\app-debug.apk

2-在虚拟设备上运行应用程序

使用Briefcase的run命令在Android设备上运行应用程序。

1
briefcase run android

运行后选择一个,或使用最后一项创建新安卓模拟器

接受默认的设备名称


07-Python编写安卓APK-使用BeeWare
https://pattianfang.github.io/2025/08/07/07-Python编写安卓APK-使用BeeWare/
作者
Pat Tian Fang
发布于
2025年8月7日
更新于
2025年8月7日
许可协议