python endswith方法大法可以开发手机APP吗

如何Python写一个安卓APP
前言:用写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择,而且实在不想学习,再者,就而言已经会的就Python与Golang(注:Python,Golang水平都一般),那么久Google了一下Python写安卓的APP的可能性,还真行。
既然要写个APP,那么总得要有个想法吧。
其实笔者想做两个APP来着,一个是自己写着好玩的,一个是关于运维的。
关于运维的APP,设计应该如下
可能长这样
然后设计应该是这样。
如果觉得可行的话,评论留言一下你觉得应该写进这个APP的运维常用命令吧^_^,笔者暂时想到的是top,free -m,df &h,uptime,iftop,iotop,如果有什么好的想法就狠狠的砸过来吧,笔者到时应该也会把这个写成一个项目放到github上,大家一起用嘛,开源才是王道,哈哈。
好吧,进入正题。
我们使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写,对于多点触控有着非常良好的支持,不仅能让开发者快速完成简洁的交互原型设计,还支持代码重用和部署,绝对是一款颇让人惊艳的NUI框架。
因为跨平台的,所以只写一遍代码,就可以同时生成安卓及的APP,很酷吧。
本文会带大家写一个Hello world并瞧一瞧Python版的2048的代码
环境说明:笔者在用的是Python2.7.10
这里仅介绍windows平台安装
所有平台参考: https://kivy.org/#download
更新pip,setuptools
python-mpipinstall--upgradepipwheelsetuptools
然后是安装所需要的依赖
python-mpipinstalldocutilspygmentspypiwin32kivy.deps.sdl2kivy.deps.glew\
kivy.deps.gstreamer--extra-index-urlhttps://kivy.org/downloads/packages/simple/
值得注意的是,上面的安卓需要访问Google,所以请自备梯子,而且kivy.deps.gstreamer这个包比较大(95MB),可以单独本地安装,/s/1o7mlxNk
然后就是安装kivy了
python-mpipinstallkivy
至此,安装就已经完毕了,值得注意的是64位没有开启虚拟化支持,在导入kivy的时候会报错,如果是64位系统就设置一下机器的BIOS,开启虚拟化支持吧。
注:这里只是kivy的运行环境,这样我就能直接在windows机器上直接调试了,怎么将代码编译成APK文件我们会在后面讲到。
如果kivy在python中应该就能导入了。
按照世界惯例,我们&hello&一下吧。
新建一个.py文件
fromkivy.appimportApp
fromkivy.uix.buttonimportButton
classTestApp(App):
defbuild(self):
returnButton(text='Hello,kivy')
TestApp().run()
然后会弹出一个框,大概如下,点击&hello,kivy&会变颜色
点击窗口并按&F1&会这个窗口的一些属性
然后我们回过头看一看代码。
##导入App,然后让TestApp这个类继承
fromkivy.appimportApp
##导入一个Button,运维有这个button,当你点击的时候才会有所反应
fromkivy.uix.buttonimportButton
###定义类,名字必须是xxxApp
classTestApp(App):
###build一个Button
defbuild(self):
###返回一个Button,文字内容是&Hello,kivy&
returnButton(text='Hello,kivy')
##运行,因为继承了App,所以才有的run这个方法
TestApp().run()
上面就是我们的Hello了
在windows上运行当然没有什么太大的意义,怎么在安卓手机上运行才是我们想要的,
这时我们需要一个编译环境。
官方说明的环境,如下:
You&ll need:
A linux computer or avirtual machine
Python 2.7 (not 2.6.)
Jinja2 (python module)
Apache ant
虽然官方提供了一个似乎还不错的镜像,但是还是有很多内容需要翻出去,所以笔者在这里提供相对而言更加完善的镜像
下载地址:/s/1geyAY7x
注:virtualbox,vmware需自行下载
root密码:kivy
默认使用账户kivy,密码:kivy123
当然你也可以下载官方镜像,因为第一次编译需要去国外下一大堆东西,所以请自备梯子。
Virtual Machine
A Virtual Machine with Android SDK and NDK and all otherpre-requisites pre installed to ease apk generation:
Kivy Buildozer VM
Or select theTorrent
在笔者提供的镜像里,桌面上有一个dev_and,只要将上面写的代码,放入这个文件夹即可(当然也可以在其他目录,后面会讲到)。
cdDesktop/dev_and/
##初始化会在当前目录生成一个buildozer.spec文件 用于配置生成的apk相关信息
buildozerinit
###修改buildozer.spec文件
vibuildozer.spec
至少修改下面三项
#(str)Titleofyourapplication
title=helloworld
#(str)Packagename
package.name=helloapp
#(str)Packagedomain(neededforandroid/iospackaging)
#(str)Applicationversioning(method1)
#version.regex=__version__=['&](.*)['&]
#version.filename=%(source.dir)s/main.py
下面这行改为非注释
version=1.2.0
最后我们生成我们需要的apk文件
buildozer-vandroiddebug
buildozer.spec更详细的相关参数配置参考:
https://buildozer.readthedocs.org/en/latest/specifications.html
buildozer命令会在当前文件夹创建一个bin,该文件夹里面有我们想要的apk文件
helloapp-1.2.0-debug.apk
安装以后应该是这样
话说在编译的时候可能出现空间不足的情况,根据虚拟机的不同(vmware或virtualbox)自行扩容吧。
最后我们来瞧瞧简易版Python开发的2048这个游戏的源代码。
代码来自:/mvasilkov/kb/tree/master/6_2048
先看效果图
试玩了一下,还是蛮流畅的,有兴趣的可以下载玩一下
下载地址:/s/1eQZACDW
这个游戏代码虽然不长,但是还是蛮占篇幅的,所以简要的说明一下流程。
主要由三部分组成,一是素材,图片音频之类的文件,二是Python代码,三是kv文件,这个kv文件有点像html中的css。
Python代码的文件名一般命名为main.py
然后一定有一个叫做XXXApp的类,并继承App。
比如该类叫做GameApp,那么该目录下的kv文件则必须为Game,如上图所示,如果不是,那么kv文件中的一些设定就不会生效。
比如设定一个标签
text:'xxxx'
font_size:60
id为time,text文本内容为'xxxx',然后字体为60
好吧,点到为止吧,不过似乎什么都没点到~~~
从无到有做一个App,我想我会另起一篇文章吧。Python是否合适做大型项目
当前位置: &
> 文章详细页
来源:&&录入者:fangseo&&日期:&&点击:
写大项目主要是逻辑的管理,和人的管理能力,与语言没关,有些语言强制加了管理能力,就省了很多管理的规划。举个浅显的例子。
汇编语言是最没管理能力的,甚至变量就是内存和寄存器。C语言有点管理能力,至少分了全局,局部,函数,函数体内变量隔离。汇编就不说了,C语言对于没经验的几个人来说很难写大型程序,但是简单的规划一下就可以写了。例如,每个变量都前缀个人的名字,int tom_ char jerry_float xx_然后如果需要共用的,就写 int public_函数同样处理,这是个非常好的技巧。但是这种技巧一直被别有用心的公司讽刺。于是出现了C++;c++ 其实把名字换成了命名空间,然后把一些函数加了class头,然后引入了面向对象的东西。但是class里面加了太多的歧义和难于理解。
于是又出现了,java ,强制用包,类java算是编译语言走到的极点,算软件工程的产物,加了太多管理和约束的东西,导致写代码又罗嗦,又麻烦。适合大工程,但是效率很低(开发效率)。
python出现了,更接近人的语言,高度的逻辑化,用python 基本上比java的逻辑减少了3倍。大项目本质上是大逻辑的管理,python从理论上说能写比java大3倍的项目。
地址:四川成都市人民南路四段成科西路3号B幢1楼
前台总机:028-传真号码:028-
从网站制作、到成都网站推广,方法数码是您值得信赖的网络公司!iOS程序员如何使用python写网路爬虫
招聘信息:
我上一篇blog说过,iOS开发如果之前没接触过除了c和c++(c++太难了,不花个十来年基本不可能精通)的语言,第二门语言最好的选择就是python.原因就是1.语法简单2.库太多,随便想要什么功能的库都找得到,简直编程界的哆啦A梦.3.语法优美,不信?你去看看python超过两千行的代码再回头看看用oc写的超过两千行的代码,oc写的简直丑到极致(没命名空间,点语法调用和括号调用混用).为什么要会写爬虫?春节前有一件活无人认领,我就自告奋勇认领了,具体如下:&自己写程序在豆瓣读书上抓取人熊节觉得一个好的程序员应该读过那20本好书 ——《重构》《精益创业》《敏捷软件开发》《测试驱动开发》等等。他在为ThoughtWorks组建成都分公司团队的时候,发愁正统招聘方法太慢了。于是,他花了几个晚上用自己高中自学的水货代码水平写了一个程序,去抓取豆瓣上读过这些技术书籍的人。然后不断递归,再抓到这些人都读过其它什么书,再继续抓读过那些书的人。抓了几万人之后,他再用Hadoop来分析,筛选出了几十个技术大牛。他把这些大牛的豆瓣账号扔给了公司女HR,让HR去一个个发豆邮勾搭。春节期间断断续续边看边学写了个爬豆瓣上优秀iOS开发人员的爬虫.所以感觉iOS开发人员有必要掌握这项技术.再举个例子,你如果想自己弄个app,例如每日精选美女之类的app,你服务端总得有图吧,怎么弄?自己用爬虫爬啊,爬到链接了塞到数据库里,传个json,app直接sdwebimage就好了.多爽!废话不多说.开始写.我先假设你用的是mac,然后mac都预装了python2.x,然后呢,你有了python没用,你得有库.没库怎么干活?怎么安装库呢?python界也有个类似于我们iOS开发里cocoapods的东西,这个东西叫做pip.pip和cocoapods用起来的命令都极其类似,我们只需要两个库,一个叫做urllib2,一个叫做beautifulsoup.urllib2是干什么的呢?它的作用就是把网页down下来,然后你就可以分析网页了.beautifulsoup干什么的呢?你用urllib2把网页down下来了之后,里面都是html+css什么的,你想要从乱七八糟的一堆html里面找到正确的图片链接那可不是件简单的事,据我这几天的学习,做法无非两个,一个是自己写正则表达式然后用一个叫re的python库,另一个是使用lxml解析xpath.这两个说实话都不太好用,一个正则就够你吃一壶的.后来我搜索了很久,发现了一个库叫做beautifulsoup,用这个库解析html超级好用.然后你们打开terminal敲入下面这个命令.pip&install&BeautifulSoup然后就会自动帮你安装BeautifulSoup这个东西了.urllib2因为是自带的,所以不用你下载了.好的我们打,这个邪恶的网站,首页都是软妹子.直接右键打开源文件.你看到的是这些东西.看上去和乱码没什么区别,但是我们需要仔细观察.终于找到了图片的链接.图片链接就在li这个标签下地img标签里.现在我们需要做的就是尝试着把这种类型的li从所有html中分离出来.我们可以看到li这个标签有个属性叫做class,这个属性的值是class="span3",我们把这段话li class="span3"搜索一下,我们发现有20个结果.恰巧,我们这个页面的图片也只有20个,那么可以确定的是我们找到了区别于其他标签的唯一性.再仔细分析下,img这个标签在li这个标签里有且只有一个.那么,也就是说,我们先搜索出所有符合条件的li标签,然后找到里面的img标签就可以找到所有的图片链接了.然后看代码.#!/usr/bin/python
#-*-&coding:&utf-8&-*-
#encoding=utf-8
import&urllib2
import&urllib
from&BeautifulSoup&import&BeautifulSoup
def&getAllImageLink():
&&&&html&=&urllib2.urlopen('').read()
&&&&soup&=&BeautifulSoup(html)
&&&&liResult&=&soup.findAll('li',attrs={"class":"span3"})
&&&&for&li&in&liResult:
&&&&&&&&imageEntityArray&=&li.findAll('img')
&&&&&&&&for&image&in&imageEntityArray:
&&&&&&&&&&&&link&=&image.get('data-src')
&&&&&&&&&&&&imageName&=&image.get('data-id')
&&&&&&&&&&&&filesavepath&=&'/Users/weihua0618/Desktop/meizipicture/%s.jpg'&%&imageName&
&&&&&&&&&&&&urllib.urlretrieve(link,filesavepath)
&&&&&&&&&&&&print&filesavepath&
if&__name__&==&'__main__':
&&&&getAllImageLink()我们来一句一句分析下.其实python的语法超级简单.凡是#打头的就是python里面的注释语句类似于oc里的//.分别说明我们的环境是python,编码是utf-8然后import了四个库,分别是urllib2,urllib,os,和beautifulsoup库.导入beautifulsoup库的方式和其他三个不太一样.我暂时也不清楚为什么python用这种导入方式,不过照猫画虎就行了.然后def打头的就是定义一个函数,python里面是不用分号做句与句的分隔符的.他用缩进来表示.与def缩进一个tab的都是函数体.html&=&urllib2.urlopen('').read()这句很简单,就是读取网页的html.然后把值赋给html这个变量.python里声明变量前面不用加任何东西,不用加声明语句和变量类型,就连javascript声明变量还要加个var呢.我们获取了网页的html之后呢,声明了一个beautifulsoup变量soup,用来准备解析html.liResult&=&soup.findAll('li',attrs={"class":"span3"})这句话的意思就是,寻找html中所有li标签,并且这个li标签有个属性class,class的值是span3.注意这个findAll函数,有点常识的话你应该清楚,凡是带all的函数基本上返回的都是一个数组,所以我们liResult这个变量实际上是一个数组.for li in liResult:这句话基本和oc里的遍历数组语法完全一样.就是遍历liResult里的每一个变量.那么每一个变量就是一个\标签.imageEntityArray = li.findAll('img')获得了li标签,我们再找出所有的img标签.一样的道理,遍历所有img标签(实际上只有一个).link = image.get('data-src')imageName = image.get('data-id')这两句的意思就是,获取img标签里的'data-src'属性和'data-id'属性,data-src就是我们最想要的图片链接了.data-id我们会用来当做下载图片之后的名字.filesavepath = '/Users/weihua0618/Desktop/meizipicture/%s.jpg' % imageNameurllib.urlretrieve(link,filesavepath)这两句,第一句是设置一个文件存放地址,第二句用urllib这个库的urlretrieve这个方法下载我们的图片,并且把图片放到刚才的路径里.好了,我们的图片就下载完了.说说我是怎么爬虫所有豆瓣iOS开发的,我先找到所有标签为ios开发的书籍,然后把所有书的id抓到,然后用id找到所有阅读过书的用户id,把所有用户id抓下来之后用hadoop分析,哪些用户id读过的书最多,列出前一百个.然后,你们懂得...(昨天我的ip还是mac地址已经被豆瓣封了)我感觉,我可以在简历上郑重的写下"精通python和大数据分析" -_-!
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量5548点击量4060点击量3713点击量3659点击量3251点击量3244点击量3231点击量3195点击量3116
&2016 Chukong Technologies,Inc.
京公网安备89手机app开发的十大流程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
手机app开发的十大流程
APICloud,重新定义移动应用开发。开发者在...|
总评分0.0|
&&APICloud是免费的APP开发平台,APP开发的十大流程
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩13页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢经验15191 米
在线时间752 小时
机型小米手机5S
签到次数205
MIUI版本7.9.5
Python是动态语言,比较简洁。Android不直接支持使用python开发应用,需要使用其它中间件或者库。PythonForAndroid提供了在android平台上对python语言的支持;CLE支持python和java之间的交互,同时提供了一个通用的接口,可用于其它多种语言。Wrapandroid project将android类封装为CLE对象,从而可以使多种语言可以调用android类。使用这三个组件,可以在android平台上直接使用python开发界面应用程序。Wrapandroid项目在进行中,目前的0.8.5版本已经提供了除SQlite,OpenGL之外大部分android类的封装。完全可以编写一个独立的python应用程序。
在android上开发python应用程序,编程和打包环境可以直接使用eclipse。1. 准备环境 a: 安装PythonForAndroid:
b: CLE在程序运行的时候,自动从网络上安装,也可以下载库函数,放到工程中。开发需要java库文件starcore_android_r6.jar。文件在starcore_devfiles_r6.zip中,可以从下载
c: Wrapandroid项目库文件wrapandroid.jar,包含在压缩包http://p/wrapandroid-for-multilaguage/download/wrapandroid_devfiles_0_8_6.rar中。2. 开始编程 a. 打开eclipse, 创建一个新的android project “introduction”
b. 如果要从网络安装,则需要添加许可权限:
& & &uses-permission android:name=&android.permission.INTERNET& /&
& & &uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&&&/uses-permission&
c. 将库文件starcore_android_r6.jar和wrapandroid.jar到工程目录下,将这两个文件加入到工程中,如下图:d. 编辑 IntroductionActivity.java,如下修改,加载python代码import com.srplab.wrapandroid.*;
public class IntroductionActivity extends WrapAndroidActivity {
& & /** Called when the activity is first created. */
& & @Override
& & public void onCreate(Bundle savedInstanceState) {
& && &&&super.onCreate(savedInstanceState);
& && &&&setContentView(R.layout.main);
& && &&&StarActivity._Call(&DoAssetsFile&, &python&, &code.py&);
如果不希望从网络安装CLE,可以将CLE的共享库文件包含在工程中,如下:
同时在activity中设置下载标志为falsepublic class IntroductionActivity extends WrapAndroidActivity {
& & /** Called when the activity is first created. */
& & @Override
& & public void onCreate(Bundle savedInstanceState) {
& &&&DownloadFromNetFlag =
& && &&&super.onCreate(savedInstanceState);
& && &&&setContentView(R.layout.main);
& && &&&StarActivity._Call(&DoAssetsFile&, &python&, &code.py&);
只不过此时生成的安装包大一些。e. 编辑layout:main.xml.&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
& & android:id=&@+id/widget73&
& & android:layout_width=&fill_parent&
& & android:layout_height=&fill_parent&
& & android:orientation=&vertical& &
& & &TextView
& && &&&android:id=&@+id/widget45&
& && &&&android:layout_width=&fill_parent&
& && &&&android:layout_height=&wrap_content&
& && &&&android:text=&@string/hello& /&
& & &Button
& && &&&android:id=&@+id/widget74&
& && &&&android:layout_width=&220dp&
& && &&&android:layout_height=&48dp&
& && &&&android:text=&thank for your use&
& && &&&android:typeface=&serif&
& && &&&android:textStyle=&bold&
& && &&&android:textColor=&#ffff0000&
& && &&&android:layout_x=&284dp&
& && &&&android:layout_y=&220dp&
& && &&&android:textSize=&16dp&
& & /&& && &&&
&/LinearLayout&
f. 在assets目录下,创建code.py文件.3. code.py代码如下 a. 获取当前服务
SrvGroup = libstarpy._GetSrvGroup()
Service = SrvGroup._GetService(&&,&&)b. 获取当前的Activity
StarActivity = Service.ActivityClass.getCurrent();c. 获取layout中定义的对象
MyText = StarActivity.findViewById(&TextViewClass&,StarActivity.getResource(&id/widget45&));
findViewById函数与标准的android函数有差异,主要是输入参数中增加了类的名称;类名称为android类名称,加上”Class”后缀。
MyText.setText(&from layout&);
MyButton = StarActivity.findViewById(&ButtonClass&,StarActivity.getResource(&id/widget74&));
定义button对象的点击事件
def MyButton_onClick(self, Ev) :
& & Service.ToastClass._New().makeText(&Button is click&, 0).show();
MyButton.onClick = MyButton_onC& &
MyButton.setOnClickListener();
setOnClickListener与android函数有差异,不需要输入listener,事件触发之后产生给本队象。
d. 动态创建对象
获取LinearLayout布局
MyLinearLayout = StarActivity.findViewById(&LinearLayoutClass&,StarActivity.getResource(&id/widget73&));
创建一个动态的按钮
MyDynaButton = Service.ButtonClass._New(MyLinearLayout);
def MyDynaButton_onClick(self, Ev) :
& & Service.ToastClass._New().makeText(&Button is click&, 0).show();
MyDynaButton.onClick = MyDynaButton_onC
MyDynaButton.setOnClickListener();
MyDynaButton.setText(&created dynamically&);
设置按钮的布局参数
MyDynaButton.setLinearLayoutParams(100,50);
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
已有&3&人评分
助人为乐^_^
精品文章^_^
精品文章^_^
MIUI世界的我 始终孤独!
经验35766 米
威望833 米
在线时间1783 小时
Keep looking. Don't settle.
机型小米手机3/4 WCDMA版
签到次数208
MIUI版本7.6.9
经验416 米
在线时间16 小时
版本JMACNAH1.0
积分 543, 距离下一级还需 1457 积分
积分 543, 距离下一级还需 1457 积分
机型小米手机1/1S
签到次数16
MIUI版本JMACNAH1.0
这些看多了,就会头晕,,,,,,,,,
请多多关照!
经验2117 米
在线时间26 小时
版本7.3.23
积分 2161, 距离下一级还需 2839 积分
积分 2161, 距离下一级还需 2839 积分
机型红米手机4 高配版
签到次数152
MIUI版本7.3.23
谢谢版主的威武!!!
好多啊!不知道何时能学会一点点!!!
经验1139 米
在线时间236 小时
版本7.1.20
积分 1716, 距离下一级还需 284 积分
积分 1716, 距离下一级还需 284 积分
机型魅族MX2
签到次数33
MIUI版本7.1.20
通过手机发布
天书啊天书
经验6476 米
在线时间372 小时
版本7.9.14
积分 7201, 距离下一级还需 12799 积分
积分 7201, 距离下一级还需 12799 积分
机型小米手机6
签到次数147
MIUI版本7.9.14
seems nice
经验2404 米
在线时间138 小时
版本6.7.28
美国人把东西做出来,曰本人做好,韩国人做便宜,中国人做山寨.
积分 3079, 距离下一级还需 1921 积分
积分 3079, 距离下一级还需 1921 积分
机型小米手机2/2S
签到次数29
MIUI版本6.7.28
传说中的派森平台?
经验2404 米
在线时间138 小时
版本6.7.28
美国人把东西做出来,曰本人做好,韩国人做便宜,中国人做山寨.
积分 3079, 距离下一级还需 1921 积分
积分 3079, 距离下一级还需 1921 积分
机型小米手机2/2S
签到次数29
MIUI版本6.7.28
小 手 一 抖,经 验 到 手。楼 猪,俺 来 帮 你 顶 帖 了~~~
经验656 米
在线时间67 小时
积分 861, 距离下一级还需 1139 积分
积分 861, 距离下一级还需 1139 积分
机型OPPO Find 5
签到次数13
MIUI版本6.8.4
通过手机发布
专业的帖子,收藏,慢慢学习
经验20204 米
在线时间779 小时
版本7.7.11
MIOS内测专员
机型小米手机5
签到次数199
MIUI版本7.7.11
希望楼主的信息能对我有所帮助,谢谢!
米兔月饼勋章
参加回帖活动
MIUI七夕鹊桥勋章
MIUI七周年
MIUI 9纪念勋章
小米众筹2周年
参加回帖活动
新版论坛APP
更新新版APP
“澎湃S1 ”芯片纪念勋章
参与活动回帖可得
APP 1000万
MIUI论坛APP注册用户突破1000万纪念勋章
月饼达人-秋
月饼达人-秋
MIUI 300周
MIUI 300周更新纪念勋章
小米六周年
小米六周年米粉节
内测督查勋章
内测督查员专属勋章
小米5发布会
参加小米5发布会直播页大转盘抽奖获得
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
MIUI三周年
MIUI三周年纪念勋章
百万壁纸评审纪念勋章
已关注微信
已关注极客秀微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI 100周
100周发布纪念勋章
发烧友俱乐部
发烧友俱乐部
MIUI六周年
MIUI六周年纪念勋章
小米手机2终身荣誉勋章
小米手机2终身荣誉勋章
疾风测评勋章
资源疾行活动限定勋章
小米7周年勋章
2017米粉节晒单赢专属勋章
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号

我要回帖

更多关于 python大数据开发奇兵 的文章

 

随机推荐