飘飘悠悠 发表于 2015-1-18 11:26:35

IOS教程之【Android】不弹root哀求框检测手机是不是root仓酷云

你可能还需要学习使用Xcode这个开发环境,接著你需要掏钱向苹果注册开发者权限,基本的帐号是99美金。本视频为“斯坦福大学iPhone开发教程”,51CTO将不断关注本视频教程的更新进度,为大家提供最新的视频。因为项目必要root安装软件,而且但愿在符合的时分引诱用户往开启root安装,故必要检测手机是不是root。
最基础的判别以下,间接运转一个底层命令。(参考https://github.com/Trinea/android-common/blob/master/src/cn/trinea/android/common/util/ShellUtils.java)
也可参考csdnhttp://blog.csdn.net/fm9333/article/details/12752415

<br>

<br>
1/**2*checkwhetherhasrootpermission3*4*@return5*/6publicstaticbooleancheckRootPermission(){7returnexecCommand("echoroot",true,false).result==0;8}91011/**12*executeshellcommands13*14*@paramcommands15*commandarray16*@paramisRoot17*whetherneedtorunwithroot18*@paramisNeedResultMsg19*whetherneedresultmsg20*@return<ul>21*<li>ifisNeedResultMsgisfalse,{@linkCommandResult#successMsg}22*isnulland{@linkCommandResult#errorMsg}isnull.</li>23*<li>if{@linkCommandResult#result}is-1,theremaybesome24*excepiton.</li>25*</ul>26*/27publicstaticCommandResultexecCommand(String[]commands,booleanisRoot,28booleanisNeedResultMsg){29intresult=-1;30if(commands==null||commands.length==0){31returnnewCommandResult(result,null,null);32}3334Processprocess=null;35BufferedReadersuccessResult=null;36BufferedReadererrorResult=null;37StringBuildersuccessMsg=null;38StringBuildererrorMsg=null;3940DataOutputStreamos=null;41try{42process=Runtime.getRuntime().exec(43isRoot?COMMAND_SU:COMMAND_SH);44os=newDataOutputStream(process.getOutputStream());45for(Stringcommand:commands){46if(command==null){47continue;48}4950//donnotuseos.writeBytes(commmand),avoidchinesecharset51//error52os.write(command.getBytes());53os.writeBytes(COMMAND_LINE_END);54os.flush();55}56os.writeBytes(COMMAND_EXIT);57os.flush();5859result=process.waitFor();60//getcommandresult61if(isNeedResultMsg){62successMsg=newStringBuilder();63errorMsg=newStringBuilder();64successResult=newBufferedReader(newInputStreamReader(65process.getInputStream()));66errorResult=newBufferedReader(newInputStreamReader(67process.getErrorStream()));68Strings;69while((s=successResult.readLine())!=null){70successMsg.append(s);71}72while((s=errorResult.readLine())!=null){73errorMsg.append(s);74}75}76}catch(IOExceptione){77e.printStackTrace();78}catch(Exceptione){79e.printStackTrace();80}finally{81try{82if(os!=null){83os.close();84}85if(successResult!=null){86successResult.close();87}88if(errorResult!=null){89errorResult.close();90}91}catch(IOExceptione){92e.printStackTrace();93}9495if(process!=null){96process.destroy();97}98}99returnnewCommandResult(result,successMsg==null?null100:successMsg.toString(),errorMsg==null?null101:errorMsg.toString());102}103104/**105*resultofcommand,106*<ul>107*<li>{@linkCommandResult#result}meansresultofcommand,0meansnormal,108*elsemeanserror,sametoexcuteinlinuxshell</li>109*<li>{@linkCommandResult#successMsg}meanssuccessmessageofcommand110*result</li>111*<li>{@linkCommandResult#errorMsg}meanserrormessageofcommandresult</li>112*</ul>113*114*@authorTrinea2013-5-16115*/116publicstaticclassCommandResult{117118/**resultofcommand**/119publicintresult;120/**successmessageofcommandresult**/121publicStringsuccessMsg;122/**errormessageofcommandresult**/123publicStringerrorMsg;124125publicCommandResult(intresult){126this.result=result;127}128129publicCommandResult(intresult,StringsuccessMsg,StringerrorMsg){130this.result=result;131this.successMsg=successMsg;132this.errorMsg=errorMsg;133}134}/**135*executeshellcommand,defaultreturnresultmsg136*137*@paramcommand138*command139*@paramisRoot140*whetherneedtorunwithroot141*@return142*@seeShellUtils#execCommand(String[],boolean,boolean)143*/144publicstaticCommandResultexecCommand(Stringcommand,booleanisRoot){145returnexecCommand(newString[]{command},isRoot,true);146}
<br>
可是这会带来一个成绩,每次判别是不是root城市弹出一个root哀求框。这是非常不友爱的一种交互体例,并且,用户假如选择作废,有部分别机是判别为非root的。
这是办法一。交互不友爱,并且有误判。
在这个情形下,为了不弹出确认框,思索到一样平常root手机城市有一些的特别文件夹,好比/system/bin/su,/system/xbin/su,内里寄存有相干的权限把持文件。
因而只需手机中有一个文件夹存在就判别这个手机root了。
然后经由测试,这类办法在年夜部分别机都可行。
代码以下:


<br>
1/**判别是不是具有ROOT权限,此办法对有些手机有效,好比小米系列*/2publicstaticbooleanisRoot(){34booleanres=false;56try{7if((!newFile("/system/bin/su").exists())8&&(!newFile("/system/xbin/su").exists())){9res=false;10}else{11res=true;12}13;14}catch(Exceptione){15res=false;16}17returnres;18}
<br>
这是办法二。交互友爱,可是有误判。
厥后测试的过程当中发明部分国产,好比小米系列,有这个文件夹,可是体系是未root的,判别成了已root。经由剖析,这是因为小米有本身的权限把持体系而招致。
思索到小米手机有大批的用户群,这个成绩必需办理,以是不能不寻觅第三种计划。
从道理动手,小米手机不管是不是root,应当都是具有相干文件的。可是有效的缘故原由应当是,文件设置了相干的权限。招致用户组没法实行相干文件。
从这个角度看,就能够从判别文件的权限动手。
先看下linux的文件权限吧。

<br>
linux文件权限具体可参考《鸟叔的linux私房菜》http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission.php#filepermission_perm
只必要在第二种办法的基本上,再别的判别文件具有者对这个文件是不是具有可实行权限(第4个字符的形态),就基础能够断定手机是不是root了。
在已root手机上(三星i9100android4.4),文件权限(x大概s,s权限,可参考http://blog.chinaunix.net/uid-20809581-id-3141879.html)以下

<br>

维护一个堆栈-(void)pushViewController:(UIViewController*)viewControlleranimated:(BOOL)animated是像堆栈里压一个UIViewController-(UIViewController*)popViewControllerAnimated:(BOOL)animated是从堆栈里弹出来一个UIViewController就算你的程序不是像联系人那样向右推进也可以用UINavigationController

蒙在股里 发表于 2015-1-21 06:53:23

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

小魔女 发表于 2015-1-21 20:54:00

我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。

精灵巫婆 发表于 2015-1-30 19:36:31

特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地

谁可相欹 发表于 2015-2-6 15:25:46

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。

柔情似水 发表于 2015-2-7 14:49:08

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

透明 发表于 2015-2-22 08:20:52

首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书

仓酷云 发表于 2015-2-22 16:35:14

首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书

兰色精灵 发表于 2015-2-27 05:49:17

还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。

爱飞 发表于 2015-3-1 22:26:15

学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。

海妖 发表于 2015-3-5 09:19:16

开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦

飘灵儿 发表于 2015-3-11 03:01:03

还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。

第二个灵魂 发表于 2015-3-17 19:10:37

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。

不帅 发表于 2015-3-24 21:25:23

培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,
页: [1]
查看完整版本: IOS教程之【Android】不弹root哀求框检测手机是不是root仓酷云