windows编译android源码-极好的! 如何用Python编写Android APP,附源码!

本文将带你写一个Hello world,看看Python版本实现的android 2048代码

前言:

用Python写Android APP绝对不是最好的选择,但绝对是一个很懒的选择,而且我真的不想学Java。 而且,在编程方面,我已经了解了Python和Golang(注:Python和Golang都一般。),Google了很长时间用Python编写Android应用程序的可能性,而且确实有效。

既然要写APP,就必须有自己的主见。

其实作者想做两个app,一个是写起来好玩,一个是运维。

关于运维APPwindows编译android源码,设计应该如下

可能看起来像这样:

那么设计应该是这样的:

如果您认为可行,请留言,留言您认为应该写进这个APP的常用运维命令^_^,笔者暂时想到top、free -m、df –h 、uptime、iftop、iotop,如果大家有什么好的意见,就在这里粉碎吧。 作者也应该把这个写成一个项目放到github上。 让我们一起使用它吧。 开源才是王道,哈哈。

好了,说到题外话了。

我们使用kivy来开发Android APP。 Kivy是一个专门用于跨平台快速应用开发的开源框架。 它是用 Python 和 Cython 编写的,对多点触控有很好的支持。 它不仅可以让开发者快速完成简单的交互原型,而且还支持代码复用和部署,绝对是一个令人惊叹的NUI框架。

因为是跨平台的,所以一次编写代码就可以同时生成Android和IOS应用程序,这很酷。

本文将带你写一个Hello world,看看2048的Python版本的代码

基维安装

源码编译是什么意思_windows编译android源码_源码编译安装

环境描述:作者使用的是Python2.7.10

这里只介绍windows平台安装

所有平台参考:#download

更新 pip、setuptools

python -m pip install --upgrade pip wheel setuptools

然后安装需要的依赖

值得注意的是,以上Android需要访问Google,所以请自带梯子,并且kivy.deps.gstreamer包比较大(95MB),可以单独安装在本地。

然后安装kivy

python -m pip install kivy

至此,安装已经完成。 值得注意的是,64位系统没有启用虚拟化支持,导出kivy时会报错。 如果是64位系统,请设置机器的BIOS启用虚拟化支持。

注:这只是kivy的运行环境,方便我直接在windows机器上调试。 如何将代码编译成APK文件前面会提到。

如果kivy应该能够在python中导出。

按照世界惯例,我们“你好”。

源码编译是什么意思_windows编译android源码_源码编译安装

创建一个新的 .py 文件

跑步:

然后会弹出一个框,大致如下,点击“hello,kivy”就会变色

单击窗口并按“F1”可以查看该窗口的一些属性

然后我们回去看代码。

以上是我们的Hello

在windows上运行确实没有多大意义。 如何在Android手机上运行才是我们想要的。

这时候我们就需要一个编译环境。

官方对环境的描述如下:

虽然官方提供的虚拟机镜像还不错windows编译android源码,但是还有很多内容需要挖掘,所以笔者这里提供了一个相对更成熟的镜像

下载链接:

注:virtualbox和vmware需要自行下载

root密码:kivy

默认使用帐号kivy,密码:kivy123

当然你也可以下载官方镜像,因为第一次编译需要去美国下载很多东西,所以请自备梯子。

虚拟机

预先安装了 Android SDK 和 NDK 以及所有其他先决条件的虚拟机,以简化 apk 生成:

Kivy 构建器虚拟机

或者选择种子

在作者提供的镜像中,桌面上有一个dev_and,只需要把里面写的代码放到这个文件夹中即可(当然也可以在其他目录下,后面会提到)。

cd Desktop/dev_and/

初始化会在当前目录生成一个buildozer.spec文件,用于配置生成的apk相关信息

buildozer init

修改buildozer.spec文件

vi buildozer.spec

至少更改以下三项

然后评论

最后生成我们需要的apk文件

buildozer -v android debug

Buildozer.spec更详细的相关参数配置参考:

buildozer命令会在当前文件夹下创建一个bin,里面有我们想要的apk文件

helloapp-1.2.0-debug.apk

安装后应该是这样的

据说编译时可能会出现空间不足的情况,根据虚拟机(vmware或virtualbox)的不同自行扩展容量。

最后我们看一下简单版Python开发的2048游戏的源码。

先看效果图

试了一下,还算流畅,有兴趣的话可以下载玩一下

下载链接:

游戏代码看似不长,但还是占用了相当多的篇幅,所以简单描述一下流程:

主要由三部分组成,一是素材、图片和音频文件,二是Python代码,三是kv文件。 这个kv文件有点像html中的css。

Python代码的文件名通常命名为main.py

那么必须有一个继承自App的类,名为XXXApp。

例如,如果类名为GameApp,那么该目录下的kv文件必须是Game,如上图所示,如果不是,kv文件中的一些设置将不会生效。

例如设置标签

Label:
    id: time
    text: 'xxxx'
    font_size: 60

id为时间,文字内容为‘xxxx’,字体为60

好了,就到最后吧,不过虽然我什么也没点击~~~

要从头开始制作一个应用程序,我想我会开始另一篇文章。

源代码和演示:

Java 和 Android 框架

扫描微信或点击下方二维码分发Android中高级资源

/ 前言/

早年刚毕业,老东家参与Launcher开发时接触到AOSP。 当时的早教平板是基于Android 4.4的源码定制的。 跑了之后,我还在应用层抓鱼。 最近很流行,想准备一些基本的坐姿,所以这篇文章就到这里啦~

温馨提示:本文并非作者个人实践,而是参考部分几位大佬文章的总结。 aosp源码的下载比较耗时。 我不需要编译和扫描源代码。 我只是在解决bug或者理解底层机制的时候看源码。 SDK自带的android.jar和一些在线源代码网站已经足够了。 环境搭建流程基本相同。 如果遇到问题,好好利用搜索引擎吧~

/ 名词/

① AOSP

中文官网:

Android Open Source Package,Android系统开源代码包,Android联通终端平台(高通、MTK等)首先在原有Android代码的基础上进行修改,形成自己的平台代码,其他手机厂商提供自己的手机基于平台代码的终端解决方案(系统定制)。

aosp源码编译后会生成一系列产品(out目录下):

我们平时在AS中听到的源码库android.jar就是打包后的classes.jar,详细路径:

out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar。 此前,在某些场景下,需要使用SDK中的隐藏API(@hide注解)。 一种解决方案是用aosp编译的classes.jar替换原生sdk中的android.jar。 具体导出例子可以看:《Android Studio 3.5导出AOSP编译的classes.jar》()

② 格里特

Android使用Git作为代码管理工具,为了更好地集中管理代码,开发了Gerrit用于初始代码审查。 事实上,它是一个Git服务器,为其服务器上托管的Git存储库提供一系列权限控制,以及用于Code Review的Web页面。

③回购协议

Repo命令行工具将Git命令封装在Python中,以简化多个Git存储库的集中管理。

/回购工作流程/

简单描述一下关键命令:

更详细的内容可以参见:《源代码控制工作流程》(

/系统规划/

只需下载源代码即可,任何系统都可以,但如果要编译它,则需要Linux或Mac OS系统。

如果Windows想要编译,可以通过虚拟机安装上述系统来间接实现。 常规方法:Docker或VirtualBox。 后面的安装例子可以看:《Android AOSP基础知识(一)VirtualBox安装Ubuntu》(

更多详情请参考:《搭建环境》(#using-a-separate-output-directory)

/ 源码下载/

下面的命令来一波吧~

# ① 安装Git、Curl、Python,有些系统自带~
sudp apt-get install git
sudo apt-get install curl
sudo apt-get install python

# ② 创建bin,并添加到PATH中
mkdir ~/bin
PATH=~/bin:$PATH

# ③ 下载Repo工具,并设置为可执行
# Tips:国外源可能有问题,可以替换为国内镜像,比如:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# ④ 创建工作文件目录 (存源码)
mkdir aosp
cd aosp

# Tips:Repo在运行过程中会尝试访问官方Git源更新自己,如果想用tuna镜像更新,可复制
# 下述内容到~/.bashrc中
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

# ⑤ Git设置身份信息(名字、邮箱)
git config --global user.name  "User Name"
git config --global user.email "user@example.com"

# ⑥ 初始化仓库 (同样支持替换镜像源)
repo init -u https://android.googlesource.com/platform/manifest

# 也支持指定分支,可选值查看:https://source.android.com/source/build-numbers#source-code-tags-and-builds
repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r8 

# ⑦ 同步代码 (拉取aosp源码到工作目录,一般要几个小时)
repo sync

# Tips:下载过程可能出现某些project找不到,可能是镜像问题,也可能是网的问题,
# 试试可以单独同步该项目,支持-jN参数,-j4如:
repo sync -c platform/frameworks/layoutlib

# 附:aosp不包含内核代码,有需要可以单独下载,版本有很多,如:
# common → 通用linux内核、goldfish → Android模拟器内核、msm → 高通MSM芯片
mkdir kernel
cd kernel
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
cd goldfish
# 可以查看有哪些内核版本分支可以下载
git branch -a
# 下载对应版本内核代码
git checkout remotes/origin/android-goldfish-3.4

更详细的内容可以参见:“下载源码”()

另外国外镜像难免不稳定,清华镜像()也可以直接使用。 第一次同步很容易失败。 建议直接用迅雷等软件下载初始化包aosp-latest.tar()进行初始化,然后同步。

/编译/

同样,首先对名词进行一些解释:

关系描述:

① 编译环境方案

# ① 安装jdk 8
sudo apt-get update
sudo apt-get install openjdk-8-jdk

# Tips:使用ubuntu 14+,还需要安装下述依赖包
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

② 源代码重组

# ① 初始化环境
source build/envsetup.sh

# ② 删除out与中间文件,clean会删除本次设置生成的、clobber会删除所有配置生成的
make clobber

# ③ 选择编译目标,下述命令会进入菜单,选择相应的版本,输入序号回车
# 编译目标都采用 BUILD-BUILDTYPE 形式,BUILD 表示特定功能代号,BUILDTYPE是以下类型之一:
# user → 权限受限、适用于生产环境,没root权限,不能debug,adb默认处于停用状态;
# userdebug → 与user类似,但具备root权限和debug权限,一般用于调试真机。
# eng → 具有额外调试工具的开发配置,拥有最大的权限(root等),一般用于模拟器。
# 编译目标示例 → Pixel 3a XL的编译目标 → aosp_bonito-userdebug
lunch

# 也可以直接指定编译目标,如:lunch aosp_bonito-eng
# 还可以直接用序号,如:lunch 8,但不建议,因为不同的系统版本序号对应可能有偏差~

# ③ 开始编译,后面的-jN参数用来设置编译的并行任务数,CPU核心数为6,N值最好选6-12间
# 根据自己CPU核心数动态修改哈,见过有32的~
make -j6

# 也可以把输出结果打印到log文件中:make -j6 2>&1 | tee build_20211206_1403.log

# 编译成功后会生成out目录,比如这里的:~/aosp/out/target/product/bonito

# Tips:有需要还可以键入:make sdk,编译SDK生成修改后的android.jar

③ 源代码列表

编译通常需要几个小时,有时可能只是更改其中一个应用程序模块,只需单独编译该模块即可,以setup模块为例:

source build/envsetup.sh
lunch aosp_bonito-eng
# 进入模块目录
cd package/apps/Setting

# 编译单独模块的可选指令如下:
# mm → 编译当前目录下的模块,不编译依赖模块
# mmm → 编译指定目录下的模块,不编译依赖模块
# mma → 编译当前目录下的模块及其依赖项
# mmmma → 编译指定路径下所有模块,切包含依赖
mm

# 编译成功会提示生成文件的存放路径,除了生成Setting.odex外,还会在
# priv-app/Settings目录下生成Settings.apk,可直接adb push或adb install
# 安装APK验证效果,也可以使用make snod命令重新打包生成system.img,运行模拟器查看

/ 闪光/

① Brother Pixel 或 Nexus

恭喜你ubuntu 编译android源码,可以直接刷机了ubuntu 编译android源码,先去Driver Binaries for Nexus and Pixel Devices()根据你的型号和Android版本号下载对应的驱动。 然后解压并执行:

./extract-qcom-sargo.sh
./extract-google_devices-sargo.sh

进入bootloader并执行烧录命令(-w表示清除数据)

adb reboot bootloader
fastboot flashall -w

然后等待刻录完成即可~

② 安卓虚拟机

你得自己编译AVD镜像,午餐时选择sdk_phone_x86_64编译目标,除了常规编译外还要添加sdk和sdk_repo包。

如果上述方法不起作用,您可以将镜像复制到 SDK/system-images/android-xx/ 目录之一。

③ 其他手机

没有真正的兄弟,驱动,厂家库等,只能找第三方ROM进行二次开发。 以前最出名的就是CM(CyanogenMod),不过好像很酷,可以试试LineageOS()

由于篇幅所限,我将一一描述。 如果有兴趣想自己尝试一下,可以参考:《自己编译Android(LineageOS)源码》()

/查看源码/

除了直接下载完整源码到本地之外,还可以直接在线查看或者直接通过AS查看。

① 在线查看

不用下载一堆代码,多个版本挑着看,很香~

② AS 快速查看

依次点击:设置→外观&行为→系统设置→Android SDK→选择所需的Android SDK版本源码下载:

然后在build.gradle中设置compileSdk版本号,点击Sync,点击跳转到Framework类进行跳转。

/调试源代码/

① 生成索引

Android源码提供了直接生成AS可识别文件的工具。 Android源码编译完成后,会在源码根目录下生成一个android.ipr。

AS 以打开现有 Android Studio 项目的方式打开此文件,并等待生成索引。

索引生成后,调整AS监控源代码的目录。 像out这样的目录每次编译都会发生变化,但是这个目录基本不会被使用,直接把索引去掉(排除)。 以out目录为例,其他不需要的目录也同样处理:

② 设置JDK和SDK

根据源码版本选择对应的SDK:

设置 JDK:

③ 调试源代码

在源代码断点下,然后单击 Attach Debugger to Android Process

选择要调试的进程,然后就可以愉快的调试了~

如果要在真机上调试系统进程,需要Root权限,然后使用Magisk等软件更改:ro.debuggable = 1,新建时可以选择Google Play以外的64位镜像模拟器,或者您可以获得 ro.debuggable = 1 的设备。

很多时候,并不需要使用全部AOSP源码进行调试,也可以直接导出部分源码进行调试。

另外,在真机上调试时,可能会出现调试行号与源码不一致的情况,行号在注释中。 大部分原因是国产ROM更改了相关源代码。 您可以在 Debugger/Frames 中查看调用方法来逐步理解这一点。 输入方法,然后按 Ctrl+F 查找方法名称并导航到正确的位置。