仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2180|回复: 19
打印 上一主题 下一主题

[学习教程] IOS编程之Android 平安架构及权限把持机制分析仓酷云

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:42:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
关于UIView的子类有很多UIButtonUITableView这个都需要各个击破看看文档从名字上就很容易理解是做什么的UIViewController是管理View和Model的类(@张开说UIViewController是用来管理view的,管理model的类自己写,当然,model也可以用UIViewController来管理,不过恐怕成为不好的代码。简介:Android是业界盛行的开源挪动平台,遭到普遍存眷并为多个手机打造商作为手机的操纵体系平台,因而,研讨其平安架构及权限把持机制具有十分的主要性。本文从Android条理化平安架构动手,具体地先容Android平台的平安架构及其权限把持机制,涵盖Android使用程序权限请求办法等,并从源代码完成层面来剖析该机制。
Android条理化平安架构
Android作为一个挪动设备的平台,其软件条理布局包含了一个操纵体系(OS),两头件(MiddleWare)和使用程序(Application)。依据Android的软件框图,其软件条理布局自下而上分为以下几个条理:
●操纵体系层(OS)
●各类库(Libraries)和Android运转情况(RunTime)
●使用程序框架(ApplicationFramework)
●使用程序(Application)
以下分离先容Andoid各个条理的软件的重点及其相干手艺:
(1)操纵体系层(OS)
Android利用Linux2.6作为操纵体系,Linux2.6是一种尺度的手艺,Linux也是一个开放的操纵体系。Android对操纵体系的利用包含中心和驱动程序两部分,Android的Linux中心为尺度的Linux2.6内核,Android更多的是必要一些与挪动设备相干的驱动程序。次要的驱动以下所示:
●显现驱动(DisplayDriver):经常使用基于Linux的帧缓冲(FrameBuffer)驱动
Flash内存驱动(FlashMemoryDriver)
●拍照机驱动(CameraDriver):经常使用基于Linux的v4l(Videofor)驱动。
●音频驱动(AudioDriver):经常使用基于ALSA(AdvancedLinuxSoundArchitecture,初级Linux声响系统)驱动
●WiFi驱动(CameraDriver):基于IEEE802.11尺度的驱动程序
●键盘驱动(KeyBoardDriver)
●蓝牙驱动(BluetoothDriver)
●BinderIPC驱动:Andoid一个特别的驱动程序,具有独自的设备节点,供应历程间通信的功效。
●PowerManagement(动力办理)
(2)各类库(Libraries)和Android运转情况(RunTime)
本条理对应一样平常嵌进式体系,相称于两头件条理。Android的本条理分红两个部分一个是各类库,另外一个是Android运转情况。本层的内容年夜多是利用C++完成的。在个中,各类库包含:
●C库:C言语的尺度库,这也是体系中一个最为底层的库,C库是经由过程Linux的体系挪用来完成。
●多媒体框架(MediaFrameword):这部份内容是Android多媒体的中心部分,基于PacketVideo(即PV)的OpenCORE,从功效上本库一共分为两年夜部分,一个部分是音频、视频的回放(PlayBack),另外一部分是则是音视频的记录(Recorder)。
●SGL:2D图象引擎。
●SSL:即SecureSocketLayer位于TCP/IP协定与各类使用层协定之间,为数据通信供应平安撑持。
●OpenGLES1.0:本部分供应了对3D的撑持。
●界面办理工具(SurfaceManagement):本部分供应了对办理显现子体系等功效。
●SQLite:一个通用的嵌进式数据库
●WebKit:收集扫瞄器的中心
●FreeType:位图和矢量字体的功效。
Android的各类库通常为以体系两头件的情势供应的,它们均有的一个明显特性就是与挪动设备的平台的使用亲切相干。Android运转情况次要指的假造机手艺——Dalvik。Dalvik假造机和一样平常JAVA假造机(JavaVM)分歧,它实行的不是JAVA尺度的字节码(bytecode)而是Dalvik可实行格局(.dex)中实行文件。在实行的过程当中,每个使用程序即一个历程(Linux的一个Process)。两者最年夜的区分在于JavaVM是以基于栈的假造机(Stack-based),而Dalvik是基于存放器的假造机(Register-based)。明显,后者最年夜的优点在于能够依据硬件完成更年夜的优化,这更合适挪动设备的特性。
(3)使用程序框架(ApplicationFramework)
Android的使用程序框架为使用程序层的开辟者供应APIs,它实践上是一个使用程序的框架。因为下层的使用程序是以JAVA构建的,因而本条理供应的起首包括了UI程序中所必要的各类控件:比方:Views(视图组件)包含lists(列表),grids(栅格),textboxes(文本框),buttons(按钮)等,乃至一个嵌进式的Web扫瞄器。一个Android的使用程序能够使用使用程序框架中的以下几个部分:Activity(举动)、BroadcastIntentReceiver(播送企图吸收者)、Service(服务)、ContentProvider(内容供应者)。
(4)使用程序(Application)
Android的使用程序次要是用户界面(UserInterface),一般以JAVA程序编写,个中还能够包括各类资本文件(安排在res目次中)。JAVA程序及相干资本经由编译后,将天生一个APK包。Android自己供应了主屏幕(Home),接洽人(Contact),德律风(Phone),扫瞄器(Browsers)等浩瀚的中心使用。同时使用程序的开辟者还可使用使用程序框架层的API完成本人的程序。
.Android分层平安架构图

<br>
Android的组件模子(ComponentModel)
Android体系中包含4种组件:
(1)Activity
Activity就是一个界面,这个界面内里能够安排各类控件。比方:TaskManager的界面、RootExplorer的界面等;Activity是为用户操纵而展现的可视化用户界面。比方说,一个activity能够展现一个菜单项列表供用户选择,大概显现一些包括申明的照片。一个短动静使用程序能够包含一个用于显现做为发送对象的接洽人的列表的activity,一个给选定的接洽人写短信的activity和翻阅之前的短信和改动设置的activity。只管
它们一同构成了一个内聚的用户界面,但个中每一个activity都与别的的坚持自力。每一个都是以Activity类为基类的子类完成。
一个使用程序能够只要一个activity,大概,如方才提到的短信使用程序那样,包括良多个。而每一个activity的感化和其数量,天然取决于使用程序及其计划。一样平常情形下,总有一个使用程序被标志为用户在使用程序启动的时分第一个看到的。从一个activity转向另外一个的体例是靠以后的activity启动下一个。
每一个activity都被赐与一个默许的窗口以举行绘制。一样平常情形下,这个窗口是满屏的,但它也能够是一个小的位于别的窗口之上的浮动窗口。一个activity也能够利用凌驾一个的窗口。比方,在activity运转过程当中弹出的一个供用户反响的小对话框,或是当用户选择了屏幕上特定项目后显现的需要信息。
窗口显现的可视内容是由一系列视图组成的,这些视图均承继自View基类。每一个视图均把持着窗口中一块特定的矩形空间。父级视图包括并构造它子视图的结构。叶节点视图(位于视图条理最底端)在它们把持的矩形中举行绘制,并对用户对其间接操纵做出呼应。以是,视图是activity与用户举行交互的界面。比方说,视图能够显现一个小图片,并在用户指导它的时分发生举措。Android有良多既定的视图供用户间接利用,包含按钮、文本域、卷轴、菜单项、复选框等等。
(2)Service
服务是运转在背景的功效模块。如文件下载、音乐播放程序等;服务没有可视化的用户界面,而是在一段工夫内涵背景运转。比方说,一个服务能够在用户做别的事变的时分在背景播放背景音乐、从收集上猎取一些数据大概盘算一些工具并供应给必要这个运算了局的activity利用。每一个服务都承继自Service基类。
一个媒体播放器播放播放列表中的曲目是一个不错的例子。播放器使用程序大概有一个或多个activity来给用户选择歌曲并举行播放。但是,音乐播放这个义务自己不该该为任何activity所处置,由于用户希冀在他们分开播放器使用程序而入手下手做其余事变时,音乐仍在持续播放。为到达这个目标,媒体播放器activity应当启用一个运转于背景的服务。而体系将在这个activity不再显现于屏幕以后,仍保持音乐播放服务的运转。
能够毗连至(绑定)一个正在运转的服务(假如服务没有运转,则启动之)。毗连以后,能够经由过程谁人服务表露出来的接口与服务举行通信。关于音乐服务来讲,这个接口能够同意用户停息、回退、中断和从头入手下手播放。
(3)ContentProvider
它是Android平台使用程序间数据共享的一种尺度接口,它以相似于URI(UniversalResourcesIdentification)的体例来暗示数据,如:content://contacts/people/1101;内容供应者将一些特定的使用程序数据供应别的使用程序利用。数据能够存储于文件体系、SQLite数据库或别的体例。内容供应者承继于ContentProvider基类,为别的使用程序取用和存储它办理的数据完成了一套尺度办法。但是,使用程序其实不间接挪用这些办法,而是利用一个ContentResolver对象,挪用它的办法作为替换。ContentResolver能够与恣意内容供应者举行会话,与其互助来对一切相干交互通信举行办理。
(4)BroadcastReceiver
BroadcastReceiver是一个专注于吸收播送关照信息,并做出对应处置的组件。良多播送是源自于体系代码的。比方,关照时区改动、电池电量低、拍摄了一张照片大概用户改动了言语选项。使用程序也能够举行播送,比方关照别的使用程序一些数据下载完成并处于可用形态。
使用程序能够具有恣意数目的BroadcastReceiver以对一切它感乐趣的关照信息予以呼应。一切的吸收器均承继自BroadcastReceiver基类。
BroadcastReceiver没有效户界面。但是,它们能够启动一个activity来呼应它们收到的信息,大概用NotificationManager来关照用户。关照能够用良多种体例来吸援用户的注重力──明灭背灯、震惊、播放声响等等。一样平常来讲是在形态栏上放一个耐久的图标,用户能够翻开它并猎取动静。
与此组件相干的观点是Intent,Intent是一个对举措和举动的笼统形貌,卖力组件之间程序之间举行动静传送。而BroadcastReceiver组件则供应了一种把Intent作为一个动静播送进来,由一切对其感乐趣的程序对其作出反响的机制。举个复杂的例子,为了完成一个体系启动后播放音乐的功效,则能够界说Intent为android.intent.action.BOOT_COMPLETED,由BroadcastReceiver组件将其举行播送,而体系中的MediaPlayer吸收到该信息后则举行播放。
如上所述,4个组件之间的干系以下图:
.Android各组件干系图

<br>
Android的权限分类
依据用户的利用历程体验,能够将Android触及的权限大抵分为以下三类:
(1)Android手机一切者权限:自用户购置Android手机后,用户不必要输出任何暗码,就具有安装一样平常使用软件、利用使用程序等的权限;
(2)Androidroot权限:该权限为Android体系的最高权限,能够对一切体系中文件、数据举行恣意操纵。出厂时默许没有该权限,必要利用z4Root等软件举行猎取,但是,其实不勉励举行此操纵,由于大概由此利用户得到手机原厂保修的权益。一样,假如将Android手机举行root权限提拔,则今后用户不必要输出任何暗码,都将能以Androidroot权限来利用手机。
(3)Android使用程序权限:Android供应了丰厚的SDK(Softwaredevelopmentkit),开辟职员能够依据其开辟Android中的使用程序。而使用程序对Android体系资本的会见必要有响应的会见权限,这个权限就称为Android使用程序权限,它在使用程序计划时设定,在Android体系中初度安装时即失效。值得注重的是:假如使用程序计划的权限年夜于Android手机一切者权限,则该使用程序没法运转。如:没有猎取Androidroot权限的手机没法运转RootExplorer,由于运转该使用程序必要Androidroot权限。
Android体系权限制义
Android体系在/system/core/private/android_filesystem_config.h头文件中对Android用户/用户组作了以下界说,且权限均基于该用户/用户组设置。
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
#defineAID_ROOT0/*traditionalunixrootuser*/
#defineAID_SYSTEM1000/*systemserver*/
#defineAID_RADIO1001/*telephonysubsystem,RIL*/
#defineAID_BLUETOOTH1002/*bluetoothsubsystem*/
#defineAID_GRAPHICS1003/*graphicsdevices*/
#defineAID_INPUT1004/*inputdevices*/
#defineAID_AUDIO1005/*audiodevices*/
#defineAID_CAMERA1006/*cameradevices*/
#defineAID_LOG1007/*logdevices*/
#defineAID_COMPASS1008/*compassdevice*/
#defineAID_MOUNT1009/*mountdsocket*/
#defineAID_WIFI1010/*wifisubsystem*/
#defineAID_ADB1011/*androiddebugbridge(adbd)*/
#defineAID_INSTALL1012/*groupforinstallingpackages*/
#defineAID_MEDIA1013/*mediaserverprocess*/
#defineAID_DHCP1014/*dhcpclient*/
#defineAID_SDCARD_RW1015/*externalstoragewriteaccess*/
#defineAID_VPN1016/*vpnsystem*/
#defineAID_KEYSTORE1017/*keystoresubsystem*/
#defineAID_USB1018/*USBdevices*/
#defineAID_DRM1019/*DRMserver*/
#defineAID_DRMIO1020/*DRMIOserver*/
#defineAID_GPS1021/*GPSdaemon*/
#defineAID_NFC1022/*nfcsubsystem*/
#defineAID_SHELL2000/*adbanddebugshelluser*/
#defineAID_CACHE2001/*cacheaccess*/
#defineAID_DIAG2002/*accesstodiagnosticresources*/
/*The3000seriesareintendedforuseassupplementalgroupidsonly.
*TheyindicatespecialAndroidcapabilitiesthatthekernelisawareof.*/
#defineAID_NET_BT_ADMIN3001/*bluetooth:createanysocket*/
#defineAID_NET_BT3002/*bluetooth:createsco,rfcommorl2capsockets*/
#defineAID_INET3003/*cancreateAF_INETandAF_INET6sockets*/
#defineAID_NET_RAW3004/*cancreaterawINETsockets*/
#defineAID_NET_ADMIN3005/*canconfigureinterfacesandroutingtables.*/
#defineAID_MISC9998/*accesstomiscstorage*/
#defineAID_NOBODY9999
#defineAID_APP10000/*firstappuser*/

值得注重的是:每一个使用程序在安装到Android体系后,体系城市为其分派一个用户ID,如app_4、app_11等。以下是Calendar和Terminal软件在Android体系中历程扫瞄的了局(个中,玄色字体标明的即为使用分派的用户ID):
1
2
3
USERPIDPPIDVSIZERSSWCHANPCNAME
app_162855236321619620960ffffffffafd0ee48Scom.android.providers.calendar
app_914178236321887225076ffffffffafd0ee48Sjackpal.androidterm

在Android体系中,上述用户/用户组对文件的会见遵守Linux体系的会见把持准绳,即依据长度为10个字符的权限把持符来决意用户/用户组对文件的会见权限。该把持符的格局遵守以下划定规矩:
●第1个字符:暗示一种特别的文件范例。个中字符可为d(暗示该文件是一个目次)、b(暗示该文件是一个体系设备,利用块输出/输入与外界交互,一般为一个磁盘)、c(暗示该文件是一个体系设备,利用一连的字符输出/输入与外界交互,如串口和声响设备),“.”暗示该文件是一个一般文件,没有特别属性。
●2~4个字符:用来断定文件的用户(user)权限;
●5~7个字符:用来断定文件的组(group)权限;
●8~10个字符:用来断定文件的别的用户(otheruser,既不是文件一切者,也不是构成员的用户)的权限。
●第2、5、8个字符是用来把持文件的读权限的,该位字符为r暗示同意用户、构成员或别的人可从该文件中读取数据。短线“-”则暗示不同意该成员读取数据。
●第3、6、9位的字符把持文件的写权限,该位若为w暗示同意写,若为“-”暗示不同意写。
●第4、7、10位的字符用来把持文件的打造权限,该位若为x暗示同意实行,若为“-”暗示不同意实行。
举个例子,“drwxrwxr&ndash;2rootroot40962月1110:36lu”暗示的会见把持权限(玄色字体标明)为:由于lu的第1个地位的字符是d,以是由此晓得lu是一个目次。第2至4地位上的属性是rwx,暗示用户root具有权限列表显现lu中一切的文件、创立新文件大概删除lu中现有的文件,大概将lu作为以后事情目次。第5至7个地位上的权限是rwx,暗示root组的成员具有和root一样的权限。第8至10位上的权限仅是r&ndash;,暗示不是root的用户及不属于root组的成员只要对lu目次列表的权限。这些用户不克不及创立大概删除lu中的文件、实行junk中的可实行文件,大概将junk作为他们确当前事情目次。
Android使用程序权限请求
每一个使用程序的APK包内里都包括有一个AndroidMainifest.xml文件,该文件除排列使用程序运转时库、运转依附干系等以外,还会具体地排列出该使用程序所需的体系会见。程序员在举行使用软件开辟时,必要经由过程设置该文件的uses-permission字段来显式地向Android体系请求会见权限。
AndroidMainifest.xml文件用处
AndroidManifest.xml次要包括以下功效:
1、申明application的java数据包,数据包名是application的独一标识;
2、形貌application的component;
3、申明application的component运转在哪一个process下;
4、声明application所必需具有的权限,用以会见受回护的部分API,和与其他application的交互;
5、声明application其他的必备权限,用以component之间的交互;
6、枚举application运转时必要的情况设置信息,这些声明信息只在程序开辟和测试时存在,公布前将被删除;
7、声明application所必要的AndroidAPI的最低版本级别,比方1.0,1.1,1.5;
8、枚举application所必要链接的库;
AndroidManifest.xml文件的布局及元素
AndroidManifest.xml文件的布局、元素,和元素的属性,能够在AndroidSDK文档中检察具体申明。而在看这些浩瀚的元素和元素的属性前,必要先懂得一下这些元素在定名、布局等方面的划定规矩:
1、元素:在一切的元素中只要和是必须的,且只能呈现一次。假如一个元素包括有其他子元素,必需经由过程子元素的属性来设置其值。处于统一条理的元素,这些元素的申明是没有按次的。
2、属性:依照常理,一切的属性都是可选的,可是有些属性是必需设置的。那些真正可选的属性,即便不存在,其也有默许的数值项申明。除根元素的属性,一切其他元素属性的名字都是以android:前缀的;
3、界说类名:一切的元素名都对应其在SDK中的类名,假如你本人界说类名,必需包括类的数据包名,假如类与application处于统一数据包中,能够间接简写为“.”;
4、多半值项:假如某个元素有凌驾一个数值,这个元素必需经由过程反复的体例来讲明其某个属性具有多个数值项,且不克不及将多个数值项一次性申明在一个属性中;
5、资本项申明:当必要援用某个资本时,其接纳以下格局:@[package:]type:name。比方
6、字符串值:相似于其他言语,假如字符中包括有字符“”,则必需利用本义字符“”;
上面分离cookie实例中的AndroidManifest.xml文件来讲明一下,原XML文件以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xmlversion=”1.0&Prime;encoding=”utf-8&Prime;?>
<manifestxmlns:android=”http://schemas.android.com/apk/res/android”
package=”moandroid.cookie”
android:versionCode=”1&Prime;
android:versionName=”1.0&Prime;>
<applicationandroid:icon=”@drawable/icon”android:label=”@string/app_name”>
<activityandroid:name=”.cookie”android:label=”@string/app_name”>
<intent-filter>
<actionandroid:name=”android.intent.action.MAIN”/>
<categoryandroid:name=”android.intent.category.LAUNCHER”/>
</intent-filter>
</activity>
</application>
<uses-sdkandroid:minSdkVersion=”3&Prime;/>
</manifest>

除头部的XML信息申明外,起首是manifest项(也就是根节点),其属性包含:schemasURL地点、包名(moandroid.cookie),和程序的版本申明。其次是manifest的子节点application,其属性包含:程序图标、程序称号。后面带有@暗示援用资本,比方:@drawable/icon暗示援用的是drawable资本中的icon,能够在其源工程的res/drawable中找到。然后就是application的子节点activity,其属性包含:activity的称号、activity的标署名,其子节点intent-filter则是对activity的申明。
而在intent-filter中,actionandroid:name=”android.intent.action.MAIN”和categoryandroid:name=”android.intent.category.LAUNCHER”用以申明程序启动时的出口activity是哪一个。假如这两个属性值平分别含有MAIN和LAUNCHER,则申明它就是启动程序时的出口举动。uses-sdkandroid:minSdkVersion=”3&Prime;申明程序利用的AndroidSDK的最低版本,个中1暗示Android1.0,2暗示Android1.1,而3则暗示Android1.5。
怎样举行使用程序权限请求
以下所示,文中黑体标志的部分为使用程序权限请求内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com.fetion.android"
android:versionCode="1"
android:versionName="1.0.0">
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".welcomActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-permissionandroid:name="android.permission.SEND_SMS"></uses-permission>
</manifest>

如上述文件形貌中加下划线的斜体部分,该文件的感化是申明该软件必要发送短信的功效。
Android界说了百余种permission,可供开辟职员利用,详细详见网址:http://developers.androidcn.com/reference/android/Manifest.permission.html。
在文件中,用户还能够自界说权限。permission就是自界说权限的声明,能够用来限定app中特别组件,特征与app外部大概和其他app之间会见。写了一个援用自界说权限的例子,在安装app的时分,提醒权限:
界说权限以下:
1
2
3
4
5
6
7
8
9
<permissionandroid:label="”自界说权限”"

android:description=”@string/test”

android:name=”com.example.project.TEST”

android:protectionLevel=”normal”

android:icon=”@drawable/ic_launcher”>

声明的寄义以下;
android:label:权限名字,显现给用户的,值但是一个string数据,比方这里的“自界说权限”。
android:description:比label更长的对权限的形貌。值是经由过程resource文件中猎取的,不克不及间接写string值,比方这里的”@string/test”。
android:name:权限名字,假如其他app援用该权限必要填写这个名字。
android:protectionLevel:权限级别,分为4个级别:
○normal:低风险权限,在安装的时分,体系会主动授与权限给application。
○dangerous:高风险权限,体系不会主动授与权限给app,在用到的时分,会给用户提醒。
○signature:署名权限,在其他app援用声明的权限的时分,必要包管两个app的署名分歧。如许体系就会主动授与权限给第三方app,而不提醒给用户。
○signatureOrSystem:这个权限是援用该权限的app必要有和体系一样的署名才干授与的权限,一样平常不保举利用。
值得注重的是:经由过程测试发明一种特别的情形,使用程序能够在程序运转时请求root权限,以下图,在利用AndroidTerminalEmulator时实验利用su命令切换到root用户。若用户已经由过程hacking的体例使得Android体系取得了root权限,则能够同意该程序以root用户权限实行;反之即算用户选择“同意”,也不克不及使程序以root用户权限实行。
.Android用户权限付与表示图

<br>
Android体系对使用程序权限请求的处置体例剖析
对Android源代码中的以下文件举行剖析:
●InstallAppProgress.java:其路径为packagesappsPackageInstallersrccomandroidpackageinstallerInstallAppProgress.java;
●PackageInstallerActivity.java:其路径为packagesappsPackageInstallersrccomandroidpackageinstallerPackageInstallerActivity.java;
●AppSecurityPermissions.java:其路径为frameworksbasecorejavaandroidwidgetAppSecurityPermissions.java
总结得出以下图所示的Android体系对使用程序受权请求的处置流程:
●进进处置使用程序受权请求的出口函数;
●体系从被安装使用程序的AndroidManifest.xml文件中猎取该使用一般运转需请求的权限列表;
●显现对话框,哀求用户确认是不是满意这些权限需求;
●若批准,则使用程序一般安装,并被付与响应的权限;若否认,则使用程序不被安装。体系仅供应给用户选择“是”大概“否”的权力,没有选择个中某些权限举行受权的权力。
.Android用户权限付与表示图

<br>

管理你的ViewController的层次可以自己写View切换的动画关掉他默认的动画文档:还有个蛋疼的UIWindow都快忘了他了因为iOS是从MacosX过来的很多工具直接拿来用这个UIWindow就是在iOS里每个App独占屏幕所以同时存在的只有一个UIWindow
小妖女 该用户已被删除
沙发
发表于 2015-1-21 12:59:55 | 只看该作者
边吃零食边看Stanford的视频教程
若天明 该用户已被删除
板凳
发表于 2015-1-22 13:45:22 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
谁可相欹 该用户已被删除
地板
发表于 2015-1-31 07:12:36 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
柔情似水 该用户已被删除
5#
发表于 2015-2-6 18:18:45 | 只看该作者
特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地
小女巫 该用户已被删除
6#
发表于 2015-2-8 08:22:03 | 只看该作者
学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-19 21:36:06 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
因胸联盟 该用户已被删除
8#
发表于 2015-3-6 15:44:29 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-13 03:53:04 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
深爱那片海 该用户已被删除
10#
发表于 2015-3-13 06:10:30 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
小魔女 该用户已被删除
11#
发表于 2015-3-13 22:07:34 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
再见西城 该用户已被删除
12#
发表于 2015-3-20 19:55:52 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
只想知道 该用户已被删除
13#
发表于 2015-3-27 22:37:38 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
变相怪杰 该用户已被删除
14#
发表于 2015-4-12 12:01:42 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
兰色精灵 该用户已被删除
15#
发表于 2015-4-24 19:58:53 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
乐观 该用户已被删除
16#
发表于 2015-4-25 09:24:38 | 只看该作者
AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
莫相离 该用户已被删除
17#
发表于 2015-4-26 22:34:39 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
透明 该用户已被删除
18#
发表于 2015-6-5 23:31:33 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
简单生活 该用户已被删除
19#
发表于 2015-6-20 20:25:15 | 只看该作者
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
精灵巫婆 该用户已被删除
20#
发表于 2015-6-23 14:33:06 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表