win10+wsl子系统Ubuntu完成对python+kivy打包成安卓apk,从零开始感受一遍

kivy是什么,自己百度,不过多赘言。

使用:

python3.8

Windows10

Ubuntu20.04

目录

1、一个kivy示例

2、win10开启wsl,安装Ubuntu子系统

3、Ubuntu上试运行示例

4、安装buildozer

5、开启代理

6、编译,生成apk

7、最后,应该在main.py所在目录下bin/目录中有一个 APK 或 AAB 文件。


1、一个kivy示例

windows下安装kivy包也不再赘述。安装后写一个main.py如下。

#qpy:kivy

import kivy
from kivy.app import App
from kivy.uix.button import Button

class MyApp(App):
    def build(self):
        return Button(text='Hello World')

if __name__ in ('__android__', '__main__'):
    MyApp().run()

windows下,运行一下:

没问题。

2、win10开启wsl,安装Ubuntu子系统

参考:win10安装子系统unbuntu18.04及图形界面_家佳哥的博客-CSDN博客win10安装子系统unbuntu18.04及图形界面,纯小白https://blog.csdn.net/qq_40687844/article/details/125270997?spm=1001.2014.3001.5502

但是,因为要用到python3.8,而Ubuntu18.04带有的python是3.6.9。所以我们选用Ubuntu20.04,带有python3.8.1。

与参考链接仅两点不同:

(1)Windows应用商店下载的是:

(2)Ubuntu20.04换源如下:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

3、Ubuntu上试运行示例

安装kivy:

完全按照官方文档,安装。

引用:Installing Kivy — Kivy 2.1.0 documentation

(1)安装pip

sudo apt install python3-pip

(2)安装 virtualenv 

python3 -m pip install --upgrade pip setuptools virtualenv

(3)创建虚拟环境

# kivy_venv创建在当前目录中命名的虚拟环境
python3 -m virtualenv kivy_venv

(4)进入虚拟环境

# 官方写的少了个/,后面可能会报错找不到资源
source /kivy_venv/bin/activate

(5)直接安装最新的尖端kivy。

开始我装的稳定版,报错了(运行maini的时候报错啥app啥没有windows啥的)

python3 -m pip install "kivy[base] @ https://github.com/kivy/kivy/archive/master.zip"

(6) 试着运行一下main.py

需要打开XLaunch,毕竟需要展示图形。

mnt下是windows的C、D、E、F盘。

我的main.py在f盘mytelegramapp文件夹,先进入

cd /mnt/f/mytelegramapp

运行:

python3 main.py

 成功在XLaunch上展示

4、安装buildozer

引用:Python Kivy打包成安卓App_fcdm_的博客-CSDN博客_buildozer打包apk

(1)安装buildozer

pip3 install buildozer

(2)然后安装buildozer的依赖项

sudo apt update
sudo apt install -y git zip unzip openjdk-8-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev lld
pip3 install Cython

(3)然后在~/.bashrc文件中加入环境变量,使用vim打开配置文件:

sudo vim ~/.bashrc

(4)将光标移至文件末尾,按i进入编辑(插入)模式。另起一行,将下面代码添加在文件末尾:

export PATH=$PATH:~/.local/bin/

5、开启代理

第一次编译过程中会自动下载许多东西,很慢、很大。几个G。

有些链接在国内好像连接不上,所以会中断,然后报错。

中断后重试你可能会遇到一个错误:sdkmanager path "/home/lukasmatrix/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager" does not exist, sdkmanager is notinstalled

解决办法参考:python - Sdkmanager not installed - Stack Overflowhttps://stackoverflow.com/questions/59330223/sdkmanager-not-installed/63268863#63268863

总之,为了避免连接中断,开启代理还是有必要的。

 wls2设置代理参考 https://www.cnblogs.com/tuilk/p/16287472.html

引用:在Linux命令行中设置并使用代理服务器 - 走看看

(1)首先要在你的代理软件里设置一下

(2 )打开

vi ~/.bashrc

(3)然后在里面插入

export https_proxy=http://你的Windows的ip: 代理软件设置的端口
export http_proxy=http://你的Windows的ip: 代理软件设置的端口

ip就是电脑的vipv4。端口号在自己的代理软件里找,比如r2vayN在界面最下面。

(4)更新

source ~/.bashrc
(5)试试
curl http://www.google.com

6、编译,生成apk

在开始之前,需要在Windows系统中修改一下权限。

打开main.py所在文件夹的属性,给自己的windows用户授予这些权限

如果你在最后一步遇到错误:shutil.Error: [('/mnt/d/think_dignity_projects/avsar/avsar_androidAPP/.buildozer/applibs', '/mnt/d/think_dignity_projects/avsar/avsar_androidAPP/.buildozer/android/app/_applibs', "[Errno 13] Permission denied: '/mnt/d/think_dignity_projects/avsar/avsar_androidAPP/.buildozer/android/app/_applibs'")]

原因可能就在于此,参考:https://github.com/kivy/buildozer/issues/1108#issuecomment-939239618https://github.com/kivy/buildozer/issues/1108#issuecomment-939239618

 设置好后,可以开始了

(1)进入main.py所在文件夹

(2)使用root权限。

su

(3)初始化 Buildozer

buildozer init

这会在目录下生成一个名为buildozer.spec的文件

(4)打包apk

buildozer -v android debug

如上述,这里第一次的处理过程非常漫长 。开启代理,就是为了这不中断。

参考官方文档:https://buildozer.readthedocs.io/en/latest/quickstart.html
        现在是喝咖啡/茶的时候了,如果你的电脑很慢的话,可以吃晚饭了。第一次构建会很慢,因为它将下载编译所需的 Android SDK、NDK 和其他工具。别担心,这些文件将保存在全局目录中,并将在您将使用 Buildozer 管理的不同项目中共享。

7、最后,应该在main.py所在目录下bin/目录中有一个 APK 或 AAB 文件。

用qq发到手机上安装成功:

搞了好久,真麻烦

感谢

1 . 把apk拷到apktool根目录下,执行:./apktool d xxx.apk,会生xxx目录,里面有res目录(各种资源文件),smali目录(类似src目录,里面文件的语法不一样)及AndroidManifest.xml。 [*.apk->*.jar: sh ./dex2jar/dex2jar.sh xxx.apk,生xxx_dex2jar.jar通过jd-linux看源码] 2 . 什么apk汉化啊,就到res/values里string.xml里修改字符串,或者拷贝一份values目录改为values-zh-rCN,再去里面修改string.xml里英文字符串改为中文,所谓的汉化就是这么简单。另外,有些图片里不是中文的得去改图片,那得用Photoshop了,图片也不能乱改,格式,图片大小(尺寸)得原来的。 3 . 修改smali文件,这个有些难度。比如有些apk安装了后要积分什么的,比如大于100才可以用的,其实这个值是用SharedPreference存放的,也就是存在xml里,,位置:/data/data/[包名]/shared_prefs的某个xml里,文件不多肯定是可以找到的。另外一种方法就是修改.smali文件也可以达到这目的,软件实现肯定是读取积分那个值给它修改一下就可以了,例如 const/16 v0 100 (其实就是 v0 = 100)这个语法有点像汇编,觉得还是比汇编简单,v0 v1 ...是寄存器,之前会跟变量关联的。具体的还是自己看看smali语法。 4 . 打包apk,执行:./apktool b xxx,会在xxx里面生,一个dist目录,里面就是xxx.apk,但不能安装滴,提示(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]),没有给这个apk签名, 5 . 签名,执行:sh ./dex2jar/d2j-apk-sign.sh ./xxx/dist/xxx.apk 就是给刚才那个apk签名,生文件还是xxx.apkapktool根目录下。这样就大功告啦。 [请看:http://blog.csdn.net/zhouyuanjing/article/details/7446988]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值