用安卓stdiu怎std文件用什么打开?

从零基础开始学习制作一款手机APP是怎样的步骤?_百度知道
从零基础开始学习制作一款手机APP是怎样的步骤?
专业和计算机没关系,大二学生,有点数据库知识,想做一款手机APP,请问这是怎样的一个步骤?我需要先学什么,怎么学?再学什么,怎么学?再用什么软件来制作,完全不知道。。。求教,答案满意的话悬赏也不会低的。。多谢!
我有更好的答案
  1进入:“金和IU APP自助工厂”官网,点击右上角的登入,登入我们前一个分享中注册的帐号以及密码.  2.登入主界面后&点击左侧的&应用管理&再点击右上角的&马上制作您的APP.  3.进入APP模版选择界面,选择你需要的APP模版,这个可以根据你自己的需求定位做何种的APP,每一种模版都有他独特的展示优点.不管选择何种APP模版,大致的制作方法都是差不多的,小编选择图文自定义模版进行分享,点击图文自定义.  4.进入APP创建界面,输入你需要创建的APP名称,APP图标,以及APP的描述.  ①、AAP名称:一定需要在取名的时候定义想好,如果命名后就尽量不要去更改,我们手机中的知名APP有那个不是一直用着同一个名字呢?就好比QQ,微信,他们没有三天两头跟换名称吧.  ②、APP图标:这个图标可以选择你企业或店面注册时候的商标,也尽量不要去更换(可以自定义)  ③、APP的描述:可以描述APP的用途,以及主要的作用等等.  填写完成后选择下一步.  5.选择程序启动图片,可以选择系统自带的图片(这个启动图片可以一个半个月到一个月更新一次)  6.也可以自定义图片,上传自己PS的个性图片,点击+号位置&上传界面&选择自己准备好的图片&打开  7上传进去后,调整成合适大小的图片,点击保存.  8上传进入后点击下一步  9.选择APP界面皮肤&点击下一步.  10.等待生成APP,  11.等到100%时系统会自动挑战到下载界面,可以通过扫苗二微码或直接下载到手机体验,但是里面没有自己的产品内容.
采纳率:63%
来自团队:
安卓开发首先要有java基础,其次在电脑里面安装java、安卓集成开发环境包括ADT eclipse和sdk等,接下来看一下安卓开发系列教程即可
谢谢,就是说我需要学会java,然后就可以看安卓开发教程进行学习了嘛?直接学习java 就可以了么?还有前期准备工作么?
没有那么难
只要稍微有一点java基础就可以从事android的开发了 学习没别的要求,多看些视频和帮助文档就好,当然如果想要高级开发,可以学一些linux的相关知识
请问高级开发指的是涉及什么内容的开发呢?
主要涉及手机网络通讯和安卓游戏开发和设计
本回答被提问者采纳
想学移动开发?先看你想学什么移动的开发,苹果的,还是安卓的……,苹果对应的是ios,安卓的对应的我就不知道了。我只会ios,就帮你介绍下吧。ios 用的是object-c 语言,对于普通的软件开发 实际上是一点都不难的,难点在游戏开发,视频开发等,就你回db 什么的 在初步的开发过程中是没有用处的。想学ios最好的方法就是进 ios的单位去实习,其次就是自己看书,不过前提你得有个mac ,mac比较贵,看你家条件怎么样了。然后我们用的编译软件 是 xcode 5.0 ,如果你想用到,gps,视频处理,陀螺仪,等一些高端技术的话,必须要自己买个iphone,或ipad,然后还要在apple官网上注册 开发者账号 缴纳 99美金……,所以对于一个独立想开发ios 的人来说,没有一定家庭条件 是很困难的,所以最好 去企业做实习生……哦 对了,可以用虚拟机装 mac os,这样就大大节省成本了。……就扯这么多,接下来你问吧。
本回答被网友采纳
(1)Java语音的基础知识:J2SE方面的基本知识点,比如:一些Java的基础类(lang包,IO包,util包(集合框架),面向对象(oop),多线程,网络编程);
(2)J2EE知识:假如我们以后想从事安卓(Android)客户端应用程序的开发,那么J2EE知识是必须掌握的。很显然安卓(Android)客户端只是做的数据的请求、展现,所需的数据都在服务器端。
(3)C语言知识、Linux操作系统,可以作为我们后续的发展需要了解的。 通常有这样一种情况,很多朋友来连Java基础还比较(安卓开发交流群:)欠缺,就开始来搞安卓(Android)开发了,当然就问题会很多了。在这里,我对于这些朋友的学习热情表示嘉奖,但是我们还是需要一步一步的来,需要打一个好的基础,有一个好的学习路线。
安卓(Android)学习资料的推荐:
(1)在网上找有价值的Android学习视频。(2)加入Android的论坛,跟里面的前辈多多学习。
(3)培训学校学习。培训机构的特点就是可以让你少走很多弯路,快速入门。如果能快速入门,到这个行业去发展,就比自己慢慢学习要好得多。毕竟现在安卓(Android)开发太热了。但是目前的培训机构实在是太多了,参差不齐,需要你们应用火眼金睛来辨别真假了。 我比较懒,不想从头认真学习安卓(Android),怎么办?那也不用担心了,现在网上有很多在线app开发平台,选择一个就能实现你的Android开发梦,比如比较好用的在线app开发平台应用之星,里面的开发都是通过按钮拖拽来实现,有需要的可以试试看。
其实零基础的人制作一款手机APP也不是不可能的事情,也不用需要你从基础去学编程代码或者UI设计,现在很多APP在线制作开发平台,你可以在线免费制作APP,选择一款合适的模板,图文操作方式非常便捷,如应用公园,你可以去试试。
ios。android是不同的,ios你要学OC,android你要学Java。你要是想开发游戏可以学cocos2d-x 这是用c++基础的。它可以跨ios和android平台的。
其他3条回答
为您推荐:
其他类似问题
app的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。> 问题详情
以下避孕方法,哪项失败率低,并能减少STD传播A.安全期B.IUDC.避孕套D.阴道隔膜E.口服避孕药
悬赏:0&答案豆
提问人:匿名网友
发布时间:
以下避孕方法,哪项失败率低,并能减少STD传播A.安全期B.IUDC.避孕套D.阴道隔膜E.口服避孕药请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1心尖搏动位于第5肋间,左锁骨中线内( )A.0~0.5cmB.0.5~1.0cmC.1.0~1.5cmD.2.0~2.5cmE.2.5~3.0cm2屈肌紧张试验阳性多见于下列哪项疾病( )A.肱骨外上髁炎B.狭窄性腱鞘炎C.肱骨内上髁炎D.臂丛神经炎E.腕管综合征3下列哪一疾病患者的机体对紫外线敏感( )A.黏液水肿患者B.高血压患者C.营养不良患者D.足感染患者E.手感染患者4根据感染的伤口、创面、溃疡的情况调整紫外线剂量下列哪项不正确( )A.感染严重,创面污秽,肉芽陈腐,坏死组织黏着时,增加照射剂量B.创面逐渐干净,肉芽逐渐新鲜,脓性分泌物减少时,照射剂量不变C.创面逐渐干净,肉芽逐渐新鲜,脓性分泌物减少时,减少照射剂量D.创面清洁,肉芽鲜红,脓性分泌物消失,减至弱红斑量E.创面肉芽水肿,渗出液增多,立即大幅度减量或停止照射
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:图解windows平台的qt在安卓平台的搭建~_qt吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:38,367贴子:
图解windows平台的qt在安卓平台的搭建~收藏
说到做到。这是第一篇说到做到的教程好吧~教程开始————————————————————————————————————嘿嘿。相信大家都知道Qt能飞奔在Android上可是有些童鞋就不知道Qt怎么搭建到Android上啦,或者有什么问题啦。没事~请删掉你下载的所有配置的android文件。跟着楼主一步一步来~都知道Qt能跨平台。首先得需要Qt呀~。。下载地址:(话说qt的5.3.2挺稳定的哦~)因为我们是windows平台哦~所以呢,我们的下载地址就是:(注意哦!楼主也是同步做的哦~)(楼主竟然抽中了光速下载~嘿嘿试试~)点击就可以下载咯(嘿嘿下好咯~)那么,我们要跨平台。也不能凭空跨呀~。那么得需要下载Android SDK,Android NDK,Apache Ant,jdk有的童鞋可能会疑问 。我知道这些啊!qt的Android配置版面有这些啊!可是我下载不了一些东西~没事~楼楼还弄了网盘~没事的一定会有的~Android SDK:(感谢foruok大神提供的Android SDK~)Android NDK:Apache Ant 在这呢!:Jdk也没忽略哦:(NDK,Ant,JDK的链接可以直接复制然后可以用下载工具下载哦~)建议大家把这些东西都装在一个文件夹哦~这样整理很方便的说·……………………………………………无尽的安装………………………………………………好啦~~安装好啦~接着我们来配置环境变量计算机→属性→高级系统设置→高级→环境变量然后呢。我们点击新建按钮~弹出了这个小小的窗口~然后我们在变量名的输入框输入:JAVA_HOME在变量值输入:(你的jdk安装地址,比如我的是E:\Qtsettings\jdk)好啦 点击确定~我们可以看到JAVA_HOME的变量名在列表出现啦~然后呢 我们再一次点击新建按钮~然后捏~在变量名输入:CLASSPATH在变量值输入:.;%JAVA_HOME%\lib\dt.%JAVA_HOME%\lib\tools.jar(一字不漏的写上去哦)然后我们就点击确定 就可以看到CLASSPATH出现在列表里面啦~天啊!没睡着吧亲~我保证这是最后一次设置环境变量啦!我们找到下面这个环境变量:Path然后呢 双击它!我们调整让光标到最后一位~然后添加:;%JAVA_HOME%\%JAVA_HOME%\jre\E:\Qtsettings\android-ndk-r10(要添加的字符串中,第一位有一个;。如果原来你的光标到最后一位时发现有了,就不用添加了哦~)呼~好啦~~ 环境变量弄好咯~………………………………………………Qt部分…………………………………………………好啦~ 我们打开已经安装好的Qt 安卓版本~然后瞧到上面工具栏中的:工具然后按照下面的步骤点击哦~工具→选项→Android楼主为了跟你们同步~统统删了哦~下好了的话~~~~ 一个个的游览你们的:JDK,Android SDK,Android NDK,Ant路径哦(其实楼主同步也没用哦)由于楼主的原因(其实就是Android SDK没有更新一些东西,就错误了),直接真机测试!点击Apply.就可以完成所有的Qt配置哦~然后我们新建一个Qt Widgets Application项目~ 名字为androidtest。基类为QWidgets然后呢 我们修改代码为下图的样子~然后呢 链接真机!然后呢 我们就点击编译接下来呢,我们就选择我们的真机!(不知道亲们有没有注意呢~真机下面的一串信息:ABI:ameabi-v7a armeabi.这是支持的手机格式哦!要与我们构建工具的支持手机格式一样哦~)哇! 好多的编译信息~楼主的CPU 是 第四代i7-4790k.编译3~8秒哦~可以看到我们的jdk大神被调用啦!还能看到中文信息呢!好了 我们到手机看看!呀!Hello World程序成功执行了!这是apk程序哦!有没有点小激动呢~返回我们的手机 还能看到我们的androidtest程序熊熊屹立在桌面哦………………………………………………教程结束………………………………………………真的是图解教程哦~33个图片文件呢~
求精 大大们~
不错 那些东西貌似不好下载 有百度网盘最好了 收藏了
我记得有的博文中说要下载 qt for Android 还是就是电脑上用的qt版本就行了?
赞!太棒了!
仅把QtCreator中相关选项填完,就能用来安卓开发了。。。
原来jdk8也能用么……我还用的jdk7u75。话说Qt已经出5.4.1了啊
找不到手机是怎么回事 求交!!
也许现在用不到,但是我相信善于收藏是个好习惯
楼主加油,多发些教程,心得,大家一起学习交流…
真特么详细
楼主你就是用你给的链接的资源装上的呀??我也正在装这个,装了一天多了,多没有装上
Qt跟Eclipse比,完全弱爆
顺道顶一下---
麻麻说名字长了看起来很牛I3
看到这里好像自己马上动手弄一弄
楼楼有没有API19的SDK包啊
为什么我从其他地方下了一个SDK包然后新建时会出现这样的错误
楼主你的里面的jre是哪里来的,我怎么没有啊
我的Android sdk,ndk都装好了,adb,ant,jdk都没问题,环境变量也配置好了。就是不知道为什么。。。。编译安卓的出错。真机,报错是:-1: error: [install_target] Error 1编译信息为。。。。我也不知道为嘛00:10:13: 为项目untitled执行步骤 ...00:10:13: 正在启动 &C:\Qt\Qt5.4.1\5.4\android_armv7\bin\qmake.exe& &F:\Qt creator\for phone\untitled\untitled.pro& -r -spec android-g++ &CONFIG+=debug&系统找不到指定的路径。00:10:14: 进程&C:\Qt\Qt5.4.1\5.4\android_armv7\bin\qmake.exe&正常退出。00:10:14: 正在启动 &C:\Qt\Qt5.4.1\Tools\mingw491_32\bin\mingw32-make.exe&C:\Qt\Qt5.4.1\5.4\android_armv7\bin\uic.exe ..\untitled\widget.ui -o ui_widget.hH:\android\android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=gnu++0x -g -g -gdwarf-2 -marm -O0 -fno-omit-frame-pointer -Wall -Wno-psabi -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\untitled -I. -IC:\Qt\Qt5.4.1\5.4\android_armv7\include -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtWidgets -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtGui -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtCore -I. -I. -IH:\android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include -IH:\android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include -IH:\android\android-ndk-r9d\platforms\android-9\arch-arm\usr\include -IC:\Qt\Qt5.4.1\5.4\android_armv7\mkspecs\android-g++ -o main.obj ..\untitled\main.cppH:\android\android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=gnu++0x -g -g -gdwarf-2 -marm -O0 -fno-omit-frame-pointer -Wall -Wno-psabi -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\untitled -I. -IC:\Qt\Qt5.4.1\5.4\android_armv7\include -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtWidgets -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtGui -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtCore -I. -I. -IH:\android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include -IH:\android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include -IH:\android\android-ndk-r9d\platforms\android-9\arch-arm\usr\include -IC:\Qt\Qt5.4.1\5.4\android_armv7\mkspecs\android-g++ -o widget.obj ..\untitled\widget.cppC:\Qt\Qt5.4.1\5.4\android_armv7\bin\moc.exe -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -IC:/Qt/Qt5.4.1/5.4/android_armv7/mkspecs/android-g++ -I&F:/Qt creator/for phone/untitled& -IC:/Qt/Qt5.4.1/5.4/android_armv7/include -IC:/Qt/Qt5.4.1/5.4/android_armv7/include/QtWidgets -IC:/Qt/Qt5.4.1/5.4/android_armv7/include/QtGui -IC:/Qt/Qt5.4.1/5.4/android_armv7/include/QtCore -I. -I/usr/include -I/usr/local/include ..\untitled\widget.h -o moc_widget.cppH:\android\android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=gnu++0x -g -g -gdwarf-2 -marm -O0 -fno-omit-frame-pointer -Wall -Wno-psabi -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\untitled -I. -IC:\Qt\Qt5.4.1\5.4\android_armv7\include -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtWidgets -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtGui -IC:\Qt\Qt5.4.1\5.4\android_armv7\include\QtCore -I. -I. -IH:\android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include -IH:\android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include -IH:\android\android-ndk-r9d\platforms\android-9\arch-arm\usr\include -IC:\Qt\Qt5.4.1\5.4\android_armv7\mkspecs\android-g++ -o moc_widget.obj moc_widget.cppH:\android\android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-g++ --sysroot=H:\android\android-ndk-r9d/platforms/android-9/arch-arm/ -Wl,-soname,libuntitled.so -Wl,--no-undefined -Wl,-z,noexecstack -shared -o libuntitled.so main.obj widget.obj moc_widget.obj
-LH:\android\android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a -LH:\android\android-ndk-r9d/platforms/android-9/arch-arm//usr/lib -LC:/Qt/Qt5.4.1/5.4/android_armv7/lib -lQt5Widgets -Lc:\Utils\android\ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a -Lc:\Utils\android\ndk/platforms/android-9/arch-arm//usr/lib -LC:\Utils\icu32_53_1_mingw482\lib -LC:\utils\postgresql\pgsql\lib -LC:\utils\mysql\mysql\lib -Lc:\mingw491\mingw32\lib -LC:\Utils\pgsql\lib -LC:\Qt\Qt5.4.1\5.4\android_armv7/lib -lQt5Gui -lQt5Core -lGLESv2 -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc00:10:19: 进程&C:\Qt\Qt5.4.1\Tools\mingw491_32\bin\mingw32-make.exe&正常退出。00:10:19: 正在启动 &C:\Qt\Qt5.4.1\Tools\mingw491_32\bin\mingw32-make.exe& INSTALL_ROOT=&F:\Qt creator\for phone\build-untitled-Android_for_armeabi_v7a_GCC_4_8_Qt_5_4_1-Debug\android-build& install系统找不到指定的路径。系统找不到指定的路径。makefile:1598: recipe for target 'install_target' failedmingw32-make: *** [install_target] Error 100:10:20: 进程&C:\Qt\Qt5.4.1\Tools\mingw491_32\bin\mingw32-make.exe&退出,退出代码 2 。Error while building/deploying project untitled (kit: Android for armeabi-v7a (GCC 4.8, Qt 5.4.1))When executing step &Copy application data&00:10:20: Elapsed time: 00:07.
楼主很有爱啊
楼主,请问调试有没有问题的呀?我可以编译运行,但是不能调试,要怎么做呢
为啥我的不行
我的没有报错
手机就是没啥反应
Error while building/deploying project untitled5 (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.2.1))当执行步骤 'Deploy to Android device'时怎么破
求助。。。。
登录百度帐号如何打包安卓手机Zip升级包?如何签名?不换Recovery,用官方Recovery_百度知道
如何打包安卓手机Zip升级包?如何签名?不换Recovery,用官方Recovery
我有更好的答案
  通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理。
我们先从update.zip包的制作开始,然后是Android系统的启动模式分析,Recovery工作原理,如何从我们上层开始选择system update到重启到Recovery服务,以及在Recovery服务中具体怎样处理update.zip包升级的,我们的安装脚本updater-script怎样被解析并执行的等一系列问题。分析过程中所用的Android源码是gingerbread0919(tcc88xx开发板标配的),测试开发板是tcc88xx。  一、 update.zip包的目录结构
|----boot.img  |----system/  |----recovery/  `|----recovery-from-boot.p  `|----etc/  `|----install-recovery.sh  |---META-INF/  `|CERT.RSA  `|CERT.SF  `|MANIFEST.MF  `|----com/  `|----google/  `|----android/  `|----update-binary  `|----updater-script  `|----android/  `|----metadata  二、 update.zip包目录结构详解  以上是我们用命令make otapackage 制作的update.zip包的标准目录结构。  1、boot.img是更新boot分区所需要的文件。这个boot.img主要包括kernel+ramdisk。  2、system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。可以将Android源码编译out/target/product/tcc8800/system/中的所有文件拷贝到这个目录来代替。  3、recovery/目录中的recovery-from-boot.p是boot.img和recovery.img的补丁(patch),主要用来更新recovery分区,其中etc/目录下的install-recovery.sh是更新脚本。  4、update-binary是一个二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作。该文件在Android源码编译后out/target/product/tcc8800/system bin/updater生成,可将updater重命名为update-binary得到。  该文件在具体的更新包中的名字由源码中bootable/recovery/install.c中的宏ASSUMED_UPDATE_BINARY_NAME的值而定。  5、updater-script:此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。该文件的命名由源码中bootable/recovery/updater/updater.c文件中的宏SCRIPT_NAME的值而定。  6、 metadata文件是描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等。  7、我们还可以在包中添加userdata目录,来更新系统中的用户数据部分。这部分内容在更新后会存放在系统的/data目录下。  8、update.zip包的签名:update.zip更新包在制作完成后需要对其签名,否则在升级时会出现认证失败的错误提示。而且签名要使用和目标板一致的加密公钥。加密公钥及加密需要的三个文件在Android源码编译后生成的具体路径为:  out/host/linux-x86/framework/signapk.jar  build/target/product/security/testkey.x509.pem  build/target/product/security/testkey.pk8 。  我们用命令make otapackage制作生成的update.zip包是已签过名的,如果自己做update.zip包时必须手动对其签名。  具体的加密方法:$ java –jar gingerbread/out/host/linux/framework/signapk.jar –w gingerbread/build/target/product/security/testkey.x509.pem
gingerbread/build/target/product/security/testkey.pk8 update.zip update_signed.zip  以上命令在update.zip包所在的路径下执行,其中signapk.jar testkey.x509.pem以及testkey.pk8文件的引用使用绝对路径。update.zip 是我们已经打好的包,update_signed.zip包是命令执行完生成的已经签过名的包。  9、MANIFEST.MF:这个manifest文件定义了与包的组成结构相关的数据。类似Android应用的mainfest.xml文件。  10、CERT.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。  11、CERT.SF:这是JAR文件的签名文件,其中前缀CERT代表签名者。  另外,在具体升级时,对update.zip包检查时大致会分三步:①检验SF文件与RSA文件是否匹配。②检验MANIFEST.MF与签名文件中的digest是否一致。③检验包中的文件与MANIFEST中所描述的是否一致。  三、 Android升级包update.zip的生成过程分析  1) 对于update.zip包的制作有两种方式,即手动制作和命令生成。  第一种手动制作:即按照update.zip的目录结构手动创建我们需要的目录。然后将对应的文件拷贝到相应的目录下,比如我们向系统中新加一个应用程序。可以将新增的应用拷贝到我们新建的update/system/app/下(system目录是事先拷贝编译源码后生成的system目录),打包并签名后,拷贝到SD卡就可以使用了。这种方式在实际的tcc8800开发板中未测试成功。签名部分未通过,可能与具体的开发板相关。  第二种制作方式:命令制作。Android源码系统中为我们提供了制作update.zip刷机包的命令,即make otapackage。该命令在编译源码完成后并在源码根目录下执行。 具体操作方式:在源码根目录下执行  ①$ . build/envsetup.sh。  ②$ lunch 然后选择你需要的配置(如17)。  ③$ make otapackage。  在编译完源码后最好再执行一遍上面的①、②步防止执行③时出现未找到对应规则的错误提示。命令执行完成后生成的升级包所在位置在out/target/product/full_tcc8800_evm_target_files-eng.mumu.059.zip将这个包重新命名为update.zip,并拷贝到SD卡中即可使用。  这种方式(即完全升级)在tcc8800开发板中已测试成功。  2) 使用make otapackage命令生成update.zip的过程分析。  在源码根目录下执行make otapackage命令生成update.zip包主要分为两步,第一步是根据Makefile执行编译生成一个update原包(zip格式)。第二步是运行一个python脚本,并以上一步准备的zip包作为输入,最终生成我们需要的升级包。下面进一步分析这两个过程。  第一步:编译Makefile。对应的Makefile文件所在位置:build/core/Makefile。从该文件的884行(tcc8800,gingerbread0919)开始会生成一个zip包,这个包最后会用来制作OTA package 或者filesystem image。先将这部分的对应的Makefile贴出来如下:  [python] view plaincopyprint?  # -----------------------------------------------------------------  # A zip of the directories that map to the target filesystem.  # This zip can be used to create an OTA package or filesystem image  # as a post-build step.  #  根据上面的Makefile可以分析这个包的生成过程:  首先创建一个root_zip根目录,并依次在此目录下创建所需要的如下其他目录  ①创建RECOVERY目录,并填充该目录的内容,包括kernel的镜像和recovery根文件系统的镜像。此目录最终用于生成recovery.img。  ②创建并填充BOOT目录。包含kernel和cmdline以及pagesize大小等,该目录最终用来生成boot.img。  ③向SYSTEM目录填充system image。  ④向DATA填充data image。  ⑤用于生成OTA package包所需要的额外的内容。主要包括一些bin命令。  ⑥创建META目录并向该目录下添加一些文本文件,如apkcerts.txt(描述apk文件用到的认证证书),misc_info.txt(描述Flash内存的块大小以及boot、recovery、system、userdata等分区的大小信息)。  ⑦使用保留连接选项压缩我们在上面获得的root_zip目录。  ⑧使用fs_config(build/tools/fs_config)配置上面的zip包内所有的系统文件(system/下各目录、文件)的权限属主等信息。fs_config包含了一个头文件#include“private/android_filesystem_config.h”。在这个头文件中以硬编码的方式设定了system目录下各文件的权限、属主。执行完配置后会将配置后的信息以文本方式输出 到META/filesystem_config.txt中。并再一次zip压缩成我们最终需要的原始包。  第二步:上面的zip包只是一个编译过程中生成的原始包。这个原始zip包在实际的编译过程中有两个作用,一是用来生成OTA update升级包,二是用来生成系统镜像。在编译过程中若生成OTA update升级包时会调用(具体位置在Makefile的1037行到1058行)一个名为ota_from_target_files的python脚本,位置在/build/tools/releasetools/ota_from_target_files。这个脚本的作用是以第一步生成的zip原始包作为输入,最终生成可用的OTA升级zip包。  二 下面我们分析ota_from_target_files这个python脚本是怎样生成最终zip包的。先讲这个脚本的代码贴出来如下:  [python] view plaincopyprint?  import sys  if sys.hexversion & 0x:  print && sys.stderr, &Python 2.4 or newer is required.&  sys.exit(1)  主函数main是python的入口函数,我们从main函数开始看,大概看一下main函数(脚本最后)里的流程就能知道脚本的执行过程了。  ① 在main函数的开头,首先将用户设定的option选项存入OPTIONS变量中,它是一个python中的类。紧接着判断有没有额外的脚本,如果有就读入到OPTIONS变量中。  ② 解压缩输入的zip包,即我们在上文生成的原始zip包。然后判断是否用到device-specific extensions(设备扩展)如果用到,随即读入到OPTIONS变量中。  ③ 判断是否签名,然后判断是否有新内容的增量源,有的话就解压该增量源包放入一个临时变量中(source_zip)。自此,所有的准备工作已完毕,随即会调用该 脚本中最主要的函数WriteFullOTAPackage(input_zip,output_zip)  ④ WriteFullOTAPackage函数的处理过程是先获得脚本的生成器。默认格式是edify。然后获得metadata元数据,此数据来至于Android的一些环境变量。然后获得设备配置参数比如api函数的版本。然后判断是否忽略时间戳。  ⑤ WriteFullOTAPackage函数做完准备工作后就开始生成升级用的脚本文件(updater-script)了。生成脚本文件后将上一步获得的metadata元数据写入到输出包out_zip。  ⑥至此一个完整的update.zip升级包就生成了。生成位置在:out/target/product/tcc8800/full_tcc8800_evm-ota-eng.mumu.326.zip。将升级包拷贝到SD卡中就可以用来升级了。  四、 Android OTA增量包update.zip的生成  在上面的过程中生成的update.zip升级包是全部系统的升级包。大小有80M多。这对手机用户来说,用来升级的流量是很大的。而且在实际升级中,我们只希望能够升级我们改变的那部分内容。这就需要使用增量包来升级。生成增量包的过程也需要上文中提到的ota_from_target_files.py的参与。  下面是制作update.zip增量包的过程。  ① 在源码根目录下依次执行下列命令  $ . build/envsetup.sh  $ lunch 选择17  $ make  $ make otapackage  执行上面的命令后会在out/target/product/tcc8800/下生成我们第一个系统升级包。我们先将其命名为A.zip  ② 在源码中修改我们需要改变的部分,比如修改内核配置,增加新的驱动等等。修改后再一次执行上面的命令。就会生成第二个我们修改后生成的update.zip升级包。将
其命名为B.zip。  ③ 在上文中我们看了ota_from_target_files.py脚本的使用帮助,其中选项-i就是用来生成差分增量包的。使用方法是以上面的A.zip 和B.zip包作为输入,以update.zip包作
为输出。生成的update.zip就是我们最后需要的增量包。  具体使用方式是:将上述两个包拷贝到源码根目录下,然后执行下面的命令。  $ ./build/tools/releasetools/ota_from_target_files -i A.zip B.zip update.zip。  在执行上述命令时会出现未找到recovery_api_version的错误。原因是在执行上面的脚本时如果使用选项i则会调用WriteIncrementalOTAPackage会从A包和B包中的META目录下搜索misc_info.txt来读取recovery_api_version的值。但是在执行make
otapackage命令时生成的update.zip包中没有这个目录更没有这个文档。  此时我们就需要使用执行make otapackage生成的原始的zip包。这个包的位置在out/target/product/tcc8800/obj/PACKAGING/target_files_intermediates/目录下,它是在用命令make otapackage之后的中间生产物,是最原始的升级包。我们将两次编译的生成的包分别重命名为A.zip和B.zip,并拷贝到SD卡根目录下重复执行上面的命令:  $ ./build/tools/releasetools/ota_form_target_files -i A.zip B.zip update.zip。  在上述命令即将执行完毕时,在device/telechips/common/releasetools.py会调用IncrementalOTA_InstallEnd,在这个函数中读取包中的RADIO/bootloader.img。  而包中是没有这个目录和bootloader.img的。所以执行失败,未能生成对应的update.zip。可能与我们未修改bootloader(升级firmware)有关。此问题在下一篇博客已经解决。制作增量包失败的原因,以及解决方案。  Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决  在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相隔的时间也比较长,所以单列一个篇幅提示大家。这个问题居然是源码中的问题,可能你已经制作成功了,不过我的这个问题确实是源码中的一个问题,不知道是不是一个bug,下文会具体分析!  一、生成OTA增量包失败的解决方案  在上一篇中末尾使用ota_from_target_files脚本制作update.zip增量包时失败,我们先将出现的错误贴出来。  在执行这个脚本的最后读取input_zip中RADIO/bootloader.img时出现错误,显示DeviceSpecifiParams这个对象中没有input_zip属性。  我们先从脚本中出现错误的调用函数中开始查找。出现错误的调用地方是在函WriteIncrementalOTAPackage(443行)中的device_specific.IncrementalOTA_InstallEnd(),其位于WriteIncrementalOTAPackage()中的末尾。进一步跟踪源码发现,这是一个回调函数,他的具体执行方法位于源码中/device/telechips/common/releasetools.py脚本中的IncrementalOTA_InstallEnd()函数。下面就分析这个函数的作用。  releasetools.py脚本中的两个函数FullOTA_InstallEnd()和IncrementalOTA_InstallEnd()的作用都是从输入包中读取RADIO/下的bootloader.img文件写到输出包中,同时生成安装bootloader.img时执行脚本的那部分命令。只不过一个是直接将输入包中的bootloader.img镜像写到输出包中,一个是先比较target_zip和source_zip中的bootloader.img是否不同(使用选项-i生成差分包时),然后将新的镜像写入输出包中。下面先将这个函数(位于/device/telechips/common/releasetools.py)的具体实现贴出来:  我们的实际情况是,在用命令make otapackage时生成的包中是没有这个RADIO目录下的bootloader.img镜像文件(因为这部分更新已被屏蔽掉了)。但是这个函数中对于从包中未读取到bootloader.img文件的情况是有错误处理的,即返回。所以我们要从
出现的实际错误中寻找问题的原由。  真正出现错误的地方是:  target_bootloader=info.input_zip.read(“RADIO/bootloader.img”)。  出现错误的原因是:AttributeError:‘DeviceSpecificParams’object has no attribute
‘input_zip’,提示我们DeviceSpecificParams对象没有input_zip这个属性。  二、updater-script脚本执行流程分析:  先看一下在测试过程中用命令make otapackage生成的升级脚本如下:  [python] view plaincopyprint?  assert(!less_than_int(, getprop(&ro.build.date.utc&)));  assert(getprop(&ro.product.device&) == &tcc8800& ||  下面分析下这个脚本的执行过程:  ①比较时间戳:如果升级包较旧则终止脚本的执行。  ②匹配设备信息:如果和当前的设备信息不一致,则停止脚本的执行。  ③显示进度条:如果以上两步匹配则开始显示升级进度条。  ④格式化system分区并挂载。  ⑤提取包中的recovery以及system目录下的内容到系统的/system下。  ⑥为/system/bin/下的命令文件建立符号连接。  ⑦设置/system/下目录以及文件的属性。  ⑧将包中的boot.img提取到/tmp/boot.img。  ⑨将/tmp/boot.img镜像文件写入到boot分区。  ⑩完成后卸载/system。  三、总结  以上的九篇着重分析了Android系统中Recovery模式中的一种,即我们做好的update.zip包在系统更新时所走过的流程。其核心部分就是Recovery服务的工作原理。其他两种FACTORY RESET、ENCRYPTED FILE SYSTEM ENABLE/DISABLE与OTA INSTALL是相通的。重点是要理解Recovery服务的工作原理。另外详细分析其升级过程,对于我们在实际升级时,可以根据我们的需要做出相应的修改。
包可以用RE管理器提取System。下个签名工具就可以了,一般好像要刷入第三方中文REC才可以刷机。
就是想问有什么签名工具
直接百度rom签名工具,一堆
本回答被提问者采纳
XT702刷机教程之使用OpenRecovery刷zip格式升级包。 1、下载好OpenRecovery,可以... 执行一下Reboot System重启手机,第一次重启可能会进入recovery界面,再次选择...
为您推荐:
其他类似问题
安卓手机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 gd给iu打电话是真的吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信