-
Android开发之Toast提示信息 Android之Toast基础教程
创建提示消息,利用按钮首先布局中有个按钮,假设id为btn01java代码如下:123456789101112Buttonbtn01=(Button)findViewById(R.id.btn01);assertbtn01!=null;//以上是按钮btn01在java中的声明btn01.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){//定义按钮监听函数Toast.makeText(MainActivity01.this,"技术",Toast.LENGTH_LONG).show();//定义Toast消息}});使用Toast的方法1、简洁一点的1Toast.makeText(MainActivity01.this,"技术",Toast.LENGTH_LONG).show();2、直接一点的12Toasttoast=Toast.makeText(getApplicationContext(),"nnuli",Toast.LENGTH_LONG);toast.show();
-
Android ROM制作教程,让你拥有自己喜欢的ROM
一.制作目的:1.培养个人兴趣,感受动手动脑的快乐。2.学习手机基本知识,最终动手制作自己的ROM。3.帮助那些需要帮助的朋友(说不定有人喜欢你制作的ROM)二.制作原理:1.安卓基础知识普及:Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android2.4Gingerbread和Android3.0Honeycomb。①底包:官方的系统包,相当于我们的Windows的操作系统,事实上它相当于一个纯净版或者内核版的系统包,是最底层的东西。扩展名为sbf,底包通常是官方发布的,ROM作者直接拿来用的,可以选择的版本不会太多,通常更新也不会频繁。底包通常使用PC端刷机工具(RSD)配合Bootloader的工程模式完成刷入。②升级包(镜像包):广大玩家制作的底包增强包,通常表现为一个update.zip文件。升级包是对底包的扩展和增强,包含一系列的辅助工具和服务,没有中文的底包通过升级包可以实现中文。当然,很多功能也是通过升级包来实现的。可以说,在刷新了底包后,配合刷新相应的升级包,这样才形成一个完整系统。升级包通常通过Recovery工具,从SD卡读取刷入。③Bootloader:相当于电脑里面的bios(基本输入输出系统),手机一开机,控制手机的就是Bootloader。我们通常所说的进入Bootloader,实际上是指进入Bootloader的工程模式,既是刷机模式,在此模式下可以将moto的sbf文件(底包)刷到机器里面。④Recovery:Moto手机内置的一个独立备份恢复工具,类似电脑上的一些一键还原系统,既是在系统出现问题的时候仍然可以打开的一个模式。Moto的Recovery主要提供了WIPE(硬启,清除数据,恢复出厂设置)和Update(通常用于安装升级包,update.zip)功能。Recovery是不能直接刷新的底包的,通常它刷新的升级包(update.zip)的方式是:自动寻找SD卡上的特定文件,然后写入。⑤基带(Baseband):是手机中的一块专门的代码,或者可以理解成为一个专门负责通讯的BIOS,负责完成移**络中无线信号的解调、解扰、解扩和解码工作。基带的不同会造成信号效果的不同。因为各地、各网络实际情况不同,需要大家自己选择适合自己的基带。⑥WIPE:wipe后就恢复了出厂设置,包括联系人、短信、安装的软件等全部删除。俗称硬启,恢复出厂设置。注意,wipe后app2sd和root权限需要重新做。而且app2sd重要的分区步骤也要重新来过。某些说法提到在刷新底包或者升级包前需要进行WIPE操作,我对此操作的必要性不是很确定。⑦OpenRecovery(简称or):由于MOTO很蛋疼的在update.zip上做了一些手脚,这些东西影响到了升级包的制作。于是高手们就搞出了一个OpenRecovery,这其实就一个第三方的增强版的Recovery工具,某些OpenRecovery已经发展成为一个具有很多功能的小系统了(类似WindowsPE),在这个or中,可以完成很多东西,我们完全可以把or想象成电脑上用的应急PE系统,在上面可以调整超频、基带、app2sd、更换启动画面、wipe、改变时区、调整键盘布局,甚至链接USB当读卡器等等,凡是recovery能做的,or都可以做,recovery不能做到,or可以做到。一般OpenRecovery在sd卡上有两个部分存在:update.zip和OpenRecovery目录,最新的GOT底包添加了新的一个OpenRecovery-CFG目录,用来存放各种个人文件。update.zip就是用来坑MOTO一个标准的的zip升级包,而真正的升级包要放在/sdcard/OpenRecovery/updates目录下。⑧App2sd:说白了,其实很简单,就是把APK文件安装到sd卡上,android是Linux脱胎而来,App2sd的原理就是对SD卡进行分区,然后把SD上划分出来的某个分区合并到系统分区中去(听不懂,不要紧),划分出来的分区是Ext2格式,一般Windows不能识别,不要惊慌,正常现象。App2sd对sd卡要求比较高,如果感觉app2sd后比较慢,可以试试换一张C4的sd卡。因为在2.1的环境下,app2sd需要对sd进行分区,操作比较复杂,E文不好的小白或者电脑基础薄弱的小白容易失误。建议对Android非常熟悉了再做App2sd。⑨Root:大家都知道android系统脱胎自Linux,也正是这个开源的内核让广大玩家可以自由发挥。Root是Linux系统下的系统级账号,拥有系统的全部权限,Android设计上的不开放这个用户的,目的是为了保护系统安全,但是这个保护似乎也带来很多不便。于是就一些工具和方法来开放这个账号。开放Root账号的方法似乎有很多,这里就不再细说。原理上分析,root的账号,应该通过在Android系统安装某个系统级别的服务,该服务具有root权限,然后其它需要root权限的程序再向这个服务请求root权限。WIPE、刷机都有可能会造成root权限失效,需要重新root权限。额外说明:①从原理上分析,通常底包,Bootloader,Recovery,基带都是可以刷新替换的,升级包当然更可以。但是底包、Bootloader很少会有第三方开发或者修改的,一般都使用官方发布的。底包有时候会内置Bootloader、Recovery,这样的底包刷新时会连上述两者一起更新(推测结果,不确定)。更新这样的底包是有危险的,有可能会造成Bootloader损坏,这个东西损坏了,基本就是变砖了,真正的变砖,只能花钱去修了。只有这个东西没坏,就不是砖。②我们通常所说的刷机ROM实际是升级包,升级包是对应于特定的底包制作的,所以刷机时务必确保使用的底包和升级包版本上保持一致。③需要注意版本号的还有:Bootloader版本、基带版本、Recovery版本④目前有些OpenRecovery工具支持底包、升级包一起从SD卡读取刷入⑤似乎刷机前确保系统干净整洁是很重要的,很多教程提到要通过WIPE-刷底包的步骤来确保刷机前的干净,实际上如果底包版本没有变化,刷底包似乎、也许、大概、可能是不必要的。2.系统结构及文件简单剖析:一个常见的自制ROM根目录会有以下几个文件夹及文件:data,-IN,system,boot.img(锁了BL的可以无视这个,但制作时需要它,打包时把它拿出来。)系统目录说明①应用程序安装目录1)系统应用程序所在目录/system/app/*.apk2)用户安装应用程序所在目录/data/app/*.apk3)注意:a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adbinstall杀死正在运行的程序时,有时旧的就会被启动②.用户数据所在目录/data/data/应用包名/shared_prefs配置文件/data/data/应用包名/databases/*库文件所在目录③.SD卡对应目录/sdcard/而我们需要处理的只是两个文件夹里面的内容:data/app——该文件夹里的文件可以全删,也可以自由添加自已所需安装的应用软件,刷机安装后可以自由删除。system/app——在这个文件夹下的程序为系统默认的组件,可以看到都是以APK格式结尾的文件,但有些系统自带的ROM里面还有和APK文件名对应的odex文件。我们主要是针对该文件夹里的文件进行精简,如果有odex文件的,删除APK文件名时同时也删除与其对应的odex文件。虽然一般定制时只是对以上两个文件夹里的文件做相应的增减,但我们还是一起来了解system相应目录常见相应文件的用途吧。rom版本不同,里面的APK也会不一样,其它文件夹下需要改动的较少,或者不需要改动。但app文件下是制作时的重点,所以详细列出:systemappsystemappAlarmClock.apk闹钟systemappBrowser.apk浏览器systemappBugreport.apkBug报告systemappCalculator.apk计算器systemappCalendar.apk日历systemappCalendarProvider.apk日历提供systemappCamera.apk照相机systemappContacts.apk联系人systemappDownloadProvider.apk下载提供systemappDrmProvider.apkDRM数字版权提供systemappEmail.apk电子邮件客户端systemappFieldTest.apk测试程序systemappGDataFeedsProvider.apkGoogleData提供systemappGmail.apkGmail电子邮件systemappGmailProvider.apkGmail提供systemappGoogleApps.apk谷歌程序包systemappGoogleSearch.apk搜索工具systemappgtalkservice.apkGTalk服务systemappHTMLViewer.apkHTML查看器systemappHtc**.apk集成**客户端PEEPsystemappIM.apk即使通讯组件包含MSN、yahoo通systemappLauncher.apk启动加载器systemappMaps.apk电子地图systemappMediaProvider.apk多媒体播放提供systemappMms.apk短信、彩信systemappMusic.apk音乐播放器systemappPackageInstaller.apkapk安装程序systemappPhone.apk电话拨号器systemappSettings.apk系统设置systemappSettingsProvider.apk设置提供systemappSetupWizard.apk设置向导systemappSoundRecorder.apk录音工具systemappStreet.apk街景地图systemappSync.apk同步程序systemappTalk.apk语音程序systemappTelephonyProvider.apk电话提供systemappUpdater.apk更新程序systemapp***Services.apk***服务systemappVending.apk制造商信息systemappVoiceDialer.apk语音拨号器systemappVoiceSearch.apk语音搜索app文件夹内放的就是内置软件,有不想要的,直接删除之。请在删除之前先弄清楚它能不能删除。有些官方内置的软件,删除了ROM就废了。当然,你也可以在没弄清楚的情况下乱删一气,只要在刷机完发现问题之后,把删除的软件,一个个放回去排查,刷个十遍八遍,大约也就搞定了。所以我们要佩服那么敢于探索的先驱,不容易啊。fonts文件夹放的是手机的字体,如果没有美术细胞的人就不要乱改,改字体有时候会死人的,刺眼、字形不协调、大小不一致等等诸如此类。要改也刷机完以后再改。具体方法要参见自己区的人发的帖子。lib文件夹顾名思义,是内置软件的库文件。有些软件需要动态库支持才能正常使用的,比如常见的输入法之类的。所以,如果你向一个原本可以正常使用的ROM中加入了新的软件之后,反而出现某程序意外关闭某程序意外结束的情况后,那么基本上就是你忘了把库文件给它移动过去。bin文件夹中放的是系统内置的工具,像什么busybox,su之类的都在里面,没事不要删除它,可以添加,但不要删除。etc文件夹中放置的是系统的设置,诸如无线、GPS、DHCP、拨号、APN列表之类的设置。这个目录中,如果你改了重要的CONF文件,则可能系统出问题。也可以改一部分不重要的东西(比如说APN列表)而不出现问题,但貌似APN列表没必要改。framework目录就是系统的UI了,想改界面的人应该改这个目录中的文件。。大约也就是替换一些什么图片,换掉界面框架什么的,改改字体颜色什么的?以达到改换界面的目的。media目录是系统内置的媒体文件,如开机音乐,内置的通话铃声、信息铃声、闹钟铃声,可以改,但格式是OGG的,可以自己去搜索如何换格式。usr目录是系统的部分使用配置,包括键盘映射表什么的,没事不要改。。。xbin目录,好吧,这个目录可以放一些工具,而且貌似官方本身在里面放了一个tcpdump,是截获网络数据包的。没试过删除它,推荐有冒险精神的可以删除之,再将结果告诉我们。system:系统分区.我们刷机器一般就是刷的这个分区.userdata:数据分区.cache:缓存分区recovery:Recovery分区,相当于建立在hboot与android系统间的一个中间层,如名字一般,主要用于系统调试和恢复。.boot:存放内核和ramdisk的分区.hboot:这个是SPL所在的分区,即bootloadersplash1:这个就是开机第一屏幕了.radio:这个是无线所在的分区,即基带所在分区。misc:其他分区3.创建一个刷机包,update-脚本语法说明①简单举例:创建一个update.zip文件是很简单的事情,你所需要做的就是将文件放置到与Android文件系统中相对应的文件夹中,然后编写一个用来复制这些文件到手机对应位置的update-,文件。作为举例,比如安装Calculator.apk到system/app文件夹,复制libsec-ril.so文件到system/lib文件夹:新建一个空文件夹(本文例:G:android)新建用来放置Calculator.apk的文件夹C:androidsystemapp以及用来放置libsec-ril.so的文件夹G:androidsystemlib。创建用来放置update-文件的文件夹G:android-INFcomgoogleandroid。创建一个名为updater-的文件,其内容如下:1.show_progress0.102.3.copy_dirPACKAGE:systemSYSTEM:4.5.show_progress0.1106.行1和行5:显示进度条行3:复制刷机包中的system文件夹到Android的/system注意:你应该在文件的最末尾多添加一个空行(也就是行6)将C:android压缩中的所有内容压缩为zip包(千万记住:是压缩android这个文件夹中的内容,不是android文件夹本身)为android.zip签名②基础语法篇1.copy_dir语法:copy_dir⑩默认时区。在/system/default.prop中修改persist.sys.timezone(如果没有该项,则手动添加)的值为Asia/Shanghai(即东八区),即persist.sys.timezone=Asia/Shanghai注:如果没有/system/default.prop,也可以在/system/build.prop中修改或添加。⑾锁了bl的同学,在修改时注意看运行时的语句,凡是涉及到的功能修改了boot.img,你就趁早删了update-相关语句重来吧,不然也不会出什么大事,就是手机卡在第一屏进不去,或者一直进入恢复模式。解决办法如果你先前备份了,那就还原一下。如果没备份,重刷底包吧。⑿接下来就是打包签名,按照提示一步一步来就OK了。
-
没有Android基础都能学会的Xposed基础教程
0×01前言随着手机使用者增多,手机智能化程度提高,各种app应运而生,这些app中不免有些恶意程序,时刻威胁着使用者,对用户的隐私等造成侵犯。究其原因是系统开源导致安全威胁,这次通过学习一个开源框架xposed来了解移动app的安全。0×02利用原理XPOSED的安装器替换安卓系统的app_process文件,从而实现对系统的接管,通过回调模块的方式来达到不用修改APK就能改变其表现行为的目的。该框架比较成熟,对应的模块也非常多,常用的还有模拟地理位置,伪装手机设备信息等,脑洞是非常之大,基本上能想到的都能做到。由于篇幅限制这里介绍一个简短而实用的案例,其他模块可以参考XPOSED官网的模块列表。0×03准备工作Android模拟器、Xposed框架、Androidstudio集成开发环境、2个相关api的jar包0×04开整新建工程注意首字符大写选择4.0.3及以上的sdk可以选择没有activity然后自己添加,也可以直接生产个空activity(推荐)首先切换到Project工程结构视图下添加2个api的jar包然后切换回android(也可以直接在project下找)修改Manifest.xml文件修改manifest.xml添加依赖,进入build.gradle(有两个,选择ap目录下的)新建一个文件夹叫assets存放xposed的初始化文件,指定程序入口。Xposed_init模拟器端操作(此实验在模拟器下操作,防止物理机使用xposed过程中变砖)安装xposedinstaller拖进去就安装了,不演示。注意要开启手机的root权限,因为使用真机经常会卡死,或者变砖,很麻烦,所以用模拟器。然后重启,注意软重启速度快,看个人喜好,卡死就关机重开,真机卡死后需要进入recovery手动删除xposed模块才可启动。将androidstudio和模拟器连接(需要adb,这个自行百度)每次启动运行程序都会让选择使用哪个设备模拟器和环境弄好之后开始实现xposed插件的编写0×05插件编写1此代码功能是在xposed中打印日志,日志内容为所以运行过的app的包名packagecom.example.administrator.xposedtest;importde.robv.android.xposed.IXposedHookLoadPackage;importde.robv.android.xposed.XposedBridge;importde.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;/***CreatedbyAdministratoron2018/2/8.*/publicclassTuorialimplementsIXposedHookLoadPackage{publicvoidhandleLoadPackage(finalLoadPackageParamlpparam)throwsThrowable{XposedBridge.log("Loadedapp:"+lpparam.packageName);}}实现效果(注意每次运行后都需要重启虚拟机来更新模块)打印了从启动设备时的所有app包名0×06插件编写-通过hook实现密码劫持首先需要写一个简单的登陆界面和跳转界面,如下图登陆界面登陆成功界面此处引入xposed提供的hook方法(实现方式是匿名内部类):findAndHookMethod(“包名”,hook的类型,“方法名”,参数,参数,***,newXC_MethodHook(){需要重写protectedvoidbeforHookedMethod(MethodHookParamparam)throwsThrowable{此方法为劫持之前(就是劫持的时候)此处劫持到账号密码修改}protectedvoidafterHookedMethod(MethodHookParamparam)throwsThrowable{此方法为劫持之后此处打印修改后的账号密码}});效果:通过修改密码,使认证无效,绕过登录验证packagecom.example.administrator.xposedtest2;/***CreatedbyAdministratoron2018/2/9.*/importandroid.util.Log;importde.robv.android.xposed.IXposedHookLoadPackage;importde.robv.android.xposed.XC_MethodHook;importde.robv.android.xposed.XposedBridge;importde.robv.android.xposed.callbacks.XC_LoadPackage;importstaticde.robv.android.xposed.XposedHelpers.findAndHookMethod;publicclassTutorialimplementsIXposedHookLoadPackage{publicvoidhandleLoadPackage(finalXC_LoadPackage.LoadPackageParamlpparam)throwsThrowable{if(!lpparam.packageName.equals("com.example.administrator.xposedtest2"))return;findAndHookMethod("com.example.administrator.xposedtest2.MainActivity",lpparam.classLoader,"isOK",String.class,String.class,newXC_MethodHook(){@OverrideprotectedvoidbeforeHookedMethod(MethodHookParamparam)throwsThrowable{XposedBridge.log("---HookStart---");XposedBridge.log("Uname="+param.args[0]);XposedBridge.log("Passwd="+param.args[1]);//param.args[0]="admin";//param.args[1]="admin";}@OverrideprotectedvoidafterHookedMethod(MethodHookParamparam)throwsThrowable{XposedBridge.log("---HookEnd---");XposedBridge.log("Uname="+param.args[0]);XposedBridge.log("Passwd="+param.args[1]);//XposedBridge.log("paramischangedalready");}});}}欢迎在评论区留言,一起学习,之后会发一些xposed的劫持实战,还有frida、substrate框架会在xposed后面发表内容有部分参考
-
Android平台设计规范整理
Android平台设计规范整理
-
IOS+ANDROID的切图与标注方法
之前的知识科普说了好些基础的概念,本篇将会结合之前我们讲到的数个概念来谈谈图为什么要这样切,标注为什么要这样做。iOS的切图与标注跑iOS的设备主要两种,iPhone和iPad。(iPodtouch就不讨论了,基本上跟iPhone一样。)iPhonesiPhone方面我们从非retina显示屏的iPhone3G/S讲到iPhone7/Plus。○苹果在推出iPhone4/S的时候首次为自己的智能手机产品配备retina显示屏。需要注意的是它的屏幕尺寸与iPhone3G/S一样,都是3.5寸,但分辨率却整整提升了四倍,也就是说同样大的屏幕塞进去了四倍的像素,PPI是前者的两倍,达到了326,视网膜屏第一次被用在iPhone之上。○iPhone5/S/C的屏幕达到了4英寸。值得注意的是,iPhone5/S/C屏幕横向还是与iPhone4/S一样保持有640颗像素,横向物理尺寸也没变,同样都是2.0英寸,变的是纵向的尺寸。屏幕边长了一点点,PPI维持不变。○iPhone6/7(Plus)屏幕分别为4.7英寸和5.5英寸。前所未有的尺寸,前所未有的分大小屏,前所未有逻辑分辨率,同时也是前所未有的物理分辨率。非Plus机型维持了326PPI,而Plus则去到了401PPI。更大的屏幕,更高的分辨率,iOS的设计师也是从这个时候开始需要输出@3x的切图了。关于Plus机型,不得不仔细说说它的一个小特点说到在iPhone6/7上,系统会根据350*667pt的逻辑画布进行一个二倍渲染,变成750*1334之后再将界面投射到屏幕上面去。Plus机型也差不多,它的逻辑画布的最佳大小是414*736pt(由于与非Plus机型的逻辑分辨率并不太悬殊,所以平时我们只是用一倍画稿进行设计也没有产生太大的问题,误差将由程序员使用一些技术上的布局手段减小)然后系统进行了一次三倍的渲染变为1242*2208px。但Plus机型的分辨率是1080*1920px的,逻辑画布渲染出来的大小怎么跟这个不一样,那还怎么准确投射,充满整个屏幕啊!在Plus机型上,渲染出来的1242*2208px会先降低采样变成1080*1920px然后再投射到屏幕上面去。我们还是来看图吧。1080*1920px相较于1242*2208px大约缩小了15%,那么很多尺寸都会出现小数,比如说131.3244px这样恶心数字,出现小数的话图片的边缘就会出现模糊的状况,而Plus机型上几乎所有图片都不是整数的,但得益于高分辨率的retina显示屏,我们的肉眼可能看不出来端倪(凑近一点看的话有可能能够看得出来大家不妨试试)。绝大部分情况下Plus的降低采样机制不会对我们的设计造成什么太过巨大的影响,记得输出@3X图即可,不过要说的是,越是细小的元素影响就会越大。iPadsiPad方面我们从非retina显示屏的第一代iPad到想要代替电脑的12.9寸的iPadPro再到iPadmini1/2/3/4。○苹果在推出第二代iPad的时候为iPad配备上了retina显示屏。iPad2/Air/Air2/Pro都维持了2048*1536的分辨率,PPI一直保持在264。7.9英寸的iPad的屏幕一直维持了这样的配置。○说出来你可能不信,除了第一代的iPadmini是非retina显示屏之外,其他(2至4代)mini的屏幕的分辨率都跟7.9英寸的iPad一模一样,物理分辨率都是2048*1536,逻辑分辨率都是768*1024,而由于屏幕变成了7.9英寸,所以PPI去到了326。○12.9英寸的iPadPro配备的超大屏幕的物理分辨率为2732*2048,逻辑分辨率为1366*1023,而PPI则去到了264。由于逻辑分辨率与其他机型实在太过悬殊,我们没办法还用跟普通iPad一样的画稿来做设计,是的老铁,你最好重开一稿重新设计。有些小伙伴可能会留意到,无论是iPhone还是iPad,好几代了屏幕的参数好像没怎么变化过,PPI不是越高越好吗?苹果是好久没升级自己屏幕,一块祖传屏幕忽悠消费者?不是的,因为人眼对于像素密度的要求会根据人眼距离屏幕的距离变化而变化,RMBP的PPI是109,被手机完爆,但是我们平时用起来还是觉得非常清晰锐利,因为我们用电脑的时候眼睛距离屏幕会比手机远,不需要那么高的像素密度也可以消除颗粒感。相应的使用距离配制相应的PPI,所谓够用就好。过高的PPI并不会带来多大的画质提升,反而会导致一连串不好的后果,加大处理器渲染负担,加大电池负担,不利于设计开发人员设计,屏幕的制造成本也会增加。早年安卓阵营出现了一些2K屏甚至4K屏的产品,现已销声匿迹,消费者根本不需要这么高分辨率的屏幕。苹果在相应的设备(无论从电脑到智能手机再到智能手表)上维持一个稳定的PPI是很明智的选择,稳定的屏幕参数非常非常有助于设计开发人员工作的开展,这种稳定性对开发者造成的便利恐怕超过了所有人的想象的。标注与切图——以Chrome浏览器为例在苹果尚未推出Plus机型的那段时间里设计师们一般都只需要输出一倍图和二倍图。一倍图针对的是没有配备retina显示屏的iPhone而二倍图针对的是配备retina显示屏的iPhone。Plus机型推出后就开始要输出三倍图了,且不配备retina显示屏的iPhone已经过于老旧,不再需要考虑。一般我们会在文件名后面加上@2X或@3X的后缀以标明文件的尺寸,就如上图所示,这是iOS的规范,还是值得准守一波的。至于iPad版本,规则也差不太多,只是iPad不需要三倍切图。总结○@2X,@3X,相应的素材请务必加上相应的后缀。○针对目前市面上的的屏幕尺寸而言,一倍图已经没有必要再输出了,而二倍、三倍图则必须要输出。○二倍三倍图的文件名必须是一样的,不然会被开发砍死。○以一倍画稿做设计,以一倍画稿输出标注文档,最后输出二倍、三倍图。○如无特殊情况,请确保文件都是.png格式。○一倍画稿输出的标注文档的单位应该为pt,而不是px。Android的切图与标注MDPI,HDPI,XHDPI,XXHDPI以及XXXHDPI大家都知道Android是一个开源系统,不像iOS只有苹果自家的机器能跑,屏幕尺寸一直以来也比较稳定,而运行Android系统的设备的屏幕却各式各样非常跳脱,这也就是以往大家经常说Android设备碎片化严重的原因之一。不过这种碎片化严重的情况来到今天已经改善了非常之多,纵使Google对于Andorid开源的策略从来没有变过,但OEM们开始不约而同地开始使用不那么“奇形怪状”的屏幕了,且某些低分辨率的机型随着时日变迁也已经被淘汰殆尽了。倒是iOS在推出Plus机型之后iOS屏幕碎片化的问题也开始凸显起来了,个人认为目前两大平台的屏幕碎片化问题都存在且大家都差不多,大家在对Android产品进行设计的时候大可不必那么担心。与iOS相似的是,设计师们同样也是需要输出不同倍率的切图,只不过需要输出的倍率更多罢了。程序员将会把所有不同倍率的切图都装在同一个安装包里面,在运行的时候系统会根据屏幕的分辨率来自动选用正确倍率的切图。坦率地讲,假如我们要纠结到每块屏幕的逻辑分辨率的话,那么Android阵营的碎片化真的是无比严重,但是我们知道,只要逻辑分辨率差的不太远的话,我们能够用同一个稿来进行设计、输出切图,其中的误差必不可能避免但将会在一个可接受的范围之内。对于Android产品来说,一般我们都使用360*640px作为一倍稿进行设计。目前为止还需要我们输出切图的分辨率有五种:代表1倍的MDPI,1.5倍的hdpi,2倍的xhdpi,3倍的xxhdpi以及4倍的xxxhdpi(三星最近发布的S8就是这个倍率)。ldpi和tvdpi以及可以不予考虑了。有一点需要提出的是,被淘汰的tvdpi这种分辨率目前被很广泛地使用到了运行Android系统的可穿戴设备上,例如前阵子很火的Moto360智能手表,假如要设计手表上面的产品的话那么就得输出这个倍率的切图。下面给出一张图,让大家看看各个档次的DPI的代表机型,某些机型年轻一点的小同学(例如我自己)可能连听都没过,大家看看就好,开拓开拓眼界,无需过分在意。标注与切图——以Chrome浏览器为例与iOS一样,我还是建议大家使用一倍稿进行设计,然后再输出各种倍率的切图就好,但是Android系统要求图片资源的命名与管理图片资源的方式是和iOS是完全不同的。上篇我们简单的介绍了下iOS的图片资源的命名方式,很简单,就是文件名加上@2X、@3X这样的小标记。然而来到了Andorid平台我们就不这样命名了。以下这张长图是Android工程文件管理图片资源的方式,我们可以看到里面有从drawable-hdpi到drawable-xxxhdpi数个文件夹,你没猜错,这些文件夹里面就放着设计师们精心设计出来的各种.png切图。Android系统会自动根据屏幕的属性来选择使用哪个文件夹里面的那套切图。譬如说在新出的盖乐世S8上面运行的话,那么系统就会自动选择使用drawable-xxxhdpi文件夹里面的图,新出的小米6的话,就会自动选用drawable-xxhdpi文件夹里面的图。并且,我们输出的图片的名字全部都要是一样的,安装不同的倍率进行导出,并且不能带有后缀或其他标记,同个图切出来不同倍率五张资源,分别被放入了相应的文件夹里面。使用神奇SketchMeasure进行批量导出,程序员会跪着感谢你的。看起来可能会是这样的:○drawable-mdpi/[文件名].png○drawable-xhdpi/[文件名].png○drawable-xxhdpi/[文件名].png○drawable-xxxhdpi/[文件名].png以下拿运行于Android平板Nexus9上的Chrome浏览器作为例子。Chrome的安装包里面带有了这五种倍率的切图,然而运行在Nexus9这台平板电脑之上的时候,它选用了xhdpi这一档分辨率的切图来对自己进行适配。总结○说是说有七种分辨率的图要切,但是就目前市面上的设备来讲你只要关注mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi这五种已经够了。如针对可穿戴设备的话,那可能会用到tvdpi。○360*640px作为一倍稿进行设计。○做标注时使用dp作为单位(iOS使用的是pt,但实际上差不多一个意思)○输出.png格式的图片资源。○记住命名规则,同个图片资源的各个倍率的文件名都是一样。-end-
-
Android的系统架构概览 Android的系统架构包括哪些部分
Android开发技术相信很多人已经非常的熟悉了,Android程序员的就业薪资与就业前景一直都是不错的,因此很多人参加Android培训或自学Android开发技术也是无可厚非的。今天小编就Android系统组成部分和运行时环境和读者一起分享。Android的系统架构概览Android的系统架构包括哪些部分Android系统组成和运行环境是什么Android系统运行环境怎么写:1、Android系统组成:(1)Linux内核层:该层是基础,包含各种驱动,并提供操作系统的基本功能。(2)中间层:该层包括程序库(Libraries)和Android运行时环境。(3)应用程序框架:该层是编写核心应用所使用的API框架。开发者可以使用这些框架来开发自己的应用,但必须遵守该框架的开发原则。(4)应用层:该层是各种应用软件,包括通话、短信、日历、地图、浏览器等核心应用程序,这些应用程序都是使用Java编写的。2、Android运行时环境Android运行时环境由一个核心库和Dalvik虚拟机组成。核心库提供Java编程语言核心库的大多数功能。每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik在一个设备中可以同时高效运行多个虚拟系统,它依赖于Linux内核的一些功能,例如线程机制和底层内存管理机制等。Dalvik虚拟机执行.dex类型的Dalvik可执行文件,该格式文件针对小内存的使用进行了优化,同时虚拟机是基于寄存器的。所有的类由Java编译器编译,然后通过SDK中的“dx”工具转化成.dex格式,最后由Dalvik虚拟机执行。现如今Android系统开发的发展毋庸置疑,不过智能设备和PC互相联动无缝对接是互联网技术的又一风口,所以Android系统仍然需要在这方面进一步的更新迭代。才能确保移动端市场霸主地位。
-
Android游戏设计步骤大公开
如今搭载Android操作系统的手机数量比iPhone多得多。据悉,Android设备平均每天激活40万台。Android手机上的小游戏也是层出不穷,每天坐地铁都能看见身边一圈人在玩开心消消乐。这些让我们爱不释手,好玩精美的小游戏都是怎么做出来的呢?Android游戏设计步骤大公开1手机游戏开发简介游戏的本质就是在屏幕上不断地显示和更新图片,只不过不是胡乱地更新,而是根据程序逻辑来控制。一款完整的游戏需要多方面的知识,比如游戏的创意、背景、故事情节、游戏音效,游戏风格、游戏类型、运行速度、适配机型等。而且,游戏的开发需要策划、美工、程序、测试的协同工作和默契配合完成的。2游戏框架设计首先需要一个用于显示游戏界面的视图类,接着需要构建一个整个游戏逻辑类来控制当前屏幕显示哪个界面,甚至对界面进行一些逻辑上的处理。在创建和控制了视图显示之后,要让游戏能够动起来,需要开启一个线程来实时更新视图显示界面并刷新视图。3地图设计通常游戏中的地图是多个小块组成的一个完整的大地图,而组成这些小块的数据一般可以使用一个二维数组来存储,然后通过程序以最快的方式将这些地图数据对应的小块映射到屏幕上组成一幅完整的地图。当然,这些数据也不是我们从键盘上一个个地输入进去的,一般情况下先由程序员做一个地图编辑器,在这个地图编辑器中用鼠标点击再保存,或者是从网络上下载一些成熟的编辑器,比如用mappy这样的工具生成地图,再用脚本语言为mappy写一个应该保持成什么格式的程序。通常地图分为45度角、俯视角和侧视角。4主角设计游戏中的主角在这里成为“精灵”,当然精灵包括的范围很广,不仅仅是主角,还有npc、道具等。既然是精灵,必然有很多动画,动画本身就是将图片一帧一帧地连接起来,循环地播放每一帧形成的。同样可以使用自己编写的精灵编辑器去编辑精灵,将精灵拆成很多部分,然后再组合起来,这样可以节省大量的空间。精灵类的特性,每次只能使用一个图像而不是多个图像来填充屏幕,可以有好几帧,但是一次只有一个显示。5图层管理器只需要将所有图层(包括地图、主角)一起添加到图层管理器中,然后设置视图查看时的位置及大小,调用图层管理器的paint方法就可以绘制出图层。绘制的顺序是按添加的反顺序,既先添加的后绘制,以免图层被覆盖之后显示不出来。6游戏音效首先我们将游戏中的音效分为如下几类:背景音乐、剧情音乐、音效(动作的音效、使用道具音效、辅助音效)等。背景音乐一般需要一直播放,而剧情音乐则只需要在剧情需要的时候播放,音效则是很短小的一段。7游戏存档游戏存档就是将玩家当前游戏的进度等信息存储下来,在玩家再次进入游戏时可以通过读取上次的存档来接着上次的进度继续游戏。(1).明确需要存储的数据首先,为了再次游戏能够顺利地转载上次的进度,需要保存主角的一些属性(包括位置,生命,攻击,防御等),还需要保存当前地图的一些属性(比如行,列,当前层数),同样还需要保存对话的相关内容,最后需要保存游戏的整个地图数据(每一层),还有当前的音乐状态。(2).保存数据获取存储的数据->将数据打包到properties中->将properties写入到文件中。(3).装载数据打开文件->将文件流装载进properties中->通过properties.get方法得到指定标签的数据-》将得到的数据赋值给应用程序中对应的变量。在退出游戏时,不管玩家是否保存都将自动保存下来。
-
安卓手机游戏开发要知道的秘诀
近来一年来,这位在1999年以Delphi(当前早已不是)所开发的GameMaker可谓风生水起,不单频频出现于各大海外游戏杂志,并且还将凭此开发的游戏直接推到了波兰游戏展上。依据Yoyogames公司当前的表明,最晚下一年中旬,GameMaker将会支撑包含Windows、Linux、Mac、iPhone、Android在内的绝大多数干流渠道,还能将游戏直接转化为HTML5(如今就有,并且只卖99$,他们说下一年会涨……附带一提,GameMaker即可以写脚本,也能爽性拖拽出游戏来)。下面所翻译的内容,即是MarkusOvermars在推特近期所发布的,关于他在手机游戏开发中所领悟出的一些“窍门秘技”。在近来,我预备发布些手机游戏开发方面的小窍门,宗旨围绕在如何规划出手机游戏高文上,比方对于iPhone和Android渠道的主张。1.首先要多玩其它游戏,你可以能从中学到很多东西,但请注意,这并不是让你去做个“企鹅牌复印机”,而是让你想想,为什么它们会成功呢?2.假如你的游戏初始界面非常糟糕,甚至让手机用户觉得杂乱无章,还是先放放游戏,多花点时间在设计菜单、帮助和界面上吧。画面一定要使用足够鲜明的色调!很多人会在明光下用小屏幕玩你的游戏,因此必须让颜色足够突出。3.如果在iPad平台发布游戏,那么建议将分辨率设定为960×640,这不单可以让游戏适应iPad平台,并且容易缩小尺寸以适应分辨率更低的设备。4.不必让美工花费太多时间在画面细节上,因为在小屏幕手机中根本看不到,而在不同大小屏幕运行时所产生的拉伸,也会让它变得非常模糊。先搞一张游戏效果图的模拟画面吧,然后放进你的iPhone或Android中检查一下效果,看看这样设计是否合适。5.有空去看下JesseSchell写的《游戏设计的艺术》(TheArtofGameDesign:ABookoflenses),这是我最喜欢的游戏设计书籍。远离3D游戏开发(注:作者开发的GM主要面向业余开发者或小团队,话出有因),这只会浪费你有限的开发时间和平白消耗精力,而且不会使你的游戏更加畅销。6.再弱智的玩家,也不可能轻易沉浸在手机的小屏幕中,因此,必须坚持以玩法独特的原创游戏为卖点。请别再创造复杂的3D世界了,2D的其实已经足够复杂(注:核心意义跟第8点重了……)。7.有时必须要构建出足够可爱的角色,才能让玩家有足够动力去帮助、抚养、引导或者营救她,要知道,同情心的作用是相当巨大的。用几张图片告知用户游戏梗概便已足够,不需再做昂贵的动画,其实人们更希望马上进入游戏。8.你可以单独做个影片讲述游戏剧情,然后把它传到视频网站,这曾使《愤怒的小鸟》得以大范围流行。(注:这条主要看销售对象,注意“内外有别”,别发错了的地方)请做出一款能在20秒内给人讲清故事背景,基本设定以及游戏目标的游戏,过于复杂的游戏可不好被用户接受。9.一次游戏,或一个关卡,应该能在短短几分钟内结束,人们掏出手机玩是想获得短期爆发的满足,而非为此奋战到死。如果某个关卡非得编的很长,就应当非常容易暂停游戏以便下回继续,不必反复攻关。10.大多数人玩手机游戏,只能坚持不到一个小时,所以,请别把好点子都放到游戏最后。在乌得勒支大学,我们预计今年会有120名本科毕业生选择手机游戏开发公司作为发展方向,这意味着将来会有一大批优秀游戏面世,同时也意味着将来会有一大票新人等着和你们竞争。《洞窟物语》这款游戏,共用了五年时间才最终完成,其中前两年是开发游戏,而剩下三年则是用来让人们欣赏我做的游戏。11.必须保证你的游戏前五分钟足够吊人胃口,如果他们不喜欢开头,就会立刻停止玩这款游戏。千万别用太多文本去讲故事,虽然我听说,女性玩家其实很喜欢有许多文本在游戏里面。12.游戏的操作与目标应该通俗易懂,以便几周没碰的玩家也能记起玩法,重玩起来。如果你在游戏里准备了一份单独的教程,请三思,人们需要的是边玩边学,而非学一会儿,再去玩。13.当设计游戏操作方式时,要先想想玩家是怎样摆弄游戏设备的,比方说平板电脑就很难单手握住。当玩家需要点击或滑动操作时,在手机的纵向模式上或许能良好运作,但换成平板电脑可就不那么简单了。14.千万别强迫玩家在横向模式下,还要将两只手都托住平板,你以为他们的手不会累吗?!在小屏幕手机上手动滚屏可是很累的,最好能避免滚屏,否则就让它自动进行(比如LGame的SRPG地图模式)。15.人们总喜欢在手机上划来划去,因此,大胆尝试设计一些能用到它的游戏互动机制吧。在你的游戏中,人们应该能享受操作,而非和你的操作对着干;就算他们产生了操作错误,大多也只会责备你的游戏,而非他们自己。16.重力感应是引导手机游戏进行的有趣方式,不过它在大多时候比触控还难,也更容易让玩家感到沮丧,慎用之。当允许使用多种游戏操作机制时(比如重力感应、按键、滑动等),要尝试让它们难度均等。17.别指望人们能理解你的游戏该如何运作,而要按照他们的思维模式去设计游戏,如果你妄想让他们照你的逻辑行事,只能刺激这些人更加讨厌你的游戏。18.当玩家在游戏死亡后,你应该让后面的游戏内容变得更简单,而非更难;反例是玩家死后就没收所有高级武器,这会让人们原本的积极性大打折扣。19.确保玩家能理解你的分数系统,为什么会有这样的分数高低呢?要清晰直观。作为一名手机游戏开发工程师,首要任务就是在玩家能力与游戏难度之间取得平衡,尝试让游戏可自适应用户水准。20.保证玩家处于一个循序渐进的游戏流程中,较易实现玩家刚好能驾驭游戏难度的效果,不过,也就是刚好罢了。设置一些能让游戏玩家喘息的地方,比如《皇家骑士团》百层迷宫中的空中花园之类,这可让复杂度高的游戏,暂时变得轻松些。21.不要给你的游戏一次性添加太多新奇设定,这不利于人们掌握游戏,以及快速投入游戏当中。如果玩家在游戏中死亡,你就应该想方设法让他相信——这完全是由他自己的失误所造成的,而非运气不好,或者游戏作弊。22.还有什么好主意呢?设计出一些与众不同的游戏场景吧,比如:铅笔,眼镜,桌子,草,灰尘,头发之类的……使用GameMaker,用它的HTML5工具来扩展你的游戏领域,我猜你能看出一个未来趋势。多想想你的按钮布局位置,最重要的是,他们应该能让用户很轻易的控制住游戏。23.玩家们总会以你意想不到的方式,去使用你所提供的控制器。比如某些脑残的玩家,会在你提供的两个按钮之间反复滑动以试图触发事件,却从没想过去点击它们。24.注意你所提供的游戏奖励机制,譬如金币、生命、情报、声望增加等等,不光数值要变化,也应该产生实际的效果特效。设计应该为营销所服务。如果你的游戏最终卖不出去,那么无论你自诩游戏设计的多好,也一点都没用——只要你做商业开发。
-
如何进行安卓APP游戏开发
对于想要进入IT行业一展风采的新手而言,要想让自己的应用脱颖而出实在是非常具有挑战性。怎样才能开发出好的、受欢迎的安卓app游戏?这成为了目前最应该考虑的问题。首先,开发者需要一个很好的创意。才能开发与众不同app游戏软件。尽管可以从其他的游戏中获取灵感,但是一定要添加进去自己的创意在里面,否则用户只是在玩相似的游戏,根本就没有什么新奇感和挑战性。如果只是这样的一个游戏,那么想要成功也是不大可能的。在过去的几年里移动app游戏开发软件行业有很多成功的典范,它们之所以成功,最主要的原因就是它们给予了游戏玩家一些前所未有的东西,这就是为什么即使是面临着非常残酷的竞争,它们也能成名就。比如说,为什么《俄罗斯方块》长生不衰?为什么《愤怒的小鸟》盛极一时?这些都是很好的例子。尊重用户,才会有更好的发展空间。其次,要让玩家乐意购买你的app开发软件。现在的各种免费软件很泛滥,盗版软件也很盛兴,想要在这样否认情况下,让人们心甘情愿的购买付费的游戏app软件,似乎是一件不太容易的事。好的游戏软件能让玩家主动购买,而不是消极的体验,会让玩家越来越难以容忍。收集、培育、创新、交流、冒险等则属于成功者。一款拥有非常良好的体验的安卓游戏,会玩家玩得不亦乐乎的基础上甘愿购买你的软件。最后也是最重要的一点,你的游戏一定要有独特性,一定要新颖,让用户在成千上万的游戏app中一眼就认出你的产品。现在在AppStore上已经有太多的游戏应用,每天都会有上百款游戏面世,即使全球所有的app开发者立刻停止开发,用户在今后的300年里也可以每天玩不同的游戏,由此竞争激烈之况可见一斑。如何开发一个优质的安卓app呢?有以下几大app开发准则:1.保证符合安卓app开发的通用开发准则;2.针对安卓手机屏幕大的特性优化app软件开发;3.利用好手机屏幕上多出来的空间;4.针对特定屏幕密度使用特定的图标和位图;5.调整字体大小和触控按钮;6.根据手机特性调整安卓app开发功能集;7.避免利用那些智能手机可能不支持的硬件功能;8.在GooglePlay上发布你开发的安卓app注意事项。对于安卓app开发平台的构建应用程序问题上,app开发者给出以下几点建议:1.要重视开发测试和编写代码;2.注意使用bug监测工具;3.允许安卓app开发者跳过传统的代码分支是绝对是有利的;4.要注意使用测试工具。
-
安卓游戏开发者:我是如何把包体从106M降到了12M
安卓游戏开发者:我是如何把包体从106M降到了12M尽管谷歌在前不久表示GooglePlay的应用大小从50MB提高到了100MB,但对于碎片化严重的Android平台来说,一款游戏想要适配多种屏幕尺寸仍然需要考虑包体的问题。最近一名安卓游戏开发者在博客中讲述了自己把游戏包体从106M降低到12M所用到的方法,遇到同样问题的童鞋们不妨借鉴,以下是Gamelook编译的博文内容:在分析了各种安卓设备的不同分辨率之后,我决定把所有的游戏资源都用6种不同的尺寸来做。然而,我担心这样做会增加最终游戏的apk文件大小,所以,我首次开始做这款游戏的时候就决定检查所有的资源。我创造了一个只包含最低(800×480)和最高(2560×1600)分辨率图片的包体,大小是106M!我需要增加4种其他大小的分辨率,所以我推测最终的apk大小至少在300MB以上,我搜索了文档,然后发现谷歌的要求包体是100MB以下,其他必须通过分割资源包的形式下载。要不然,你也可以为不同的设备提供不同的apk文件,但这两种做法我都不太喜欢,我最讨厌下在安卓游戏之后还必须等待更多的时间下载数百兆资源,我需要新的方式解决这种冲突。我上网进行了搜索,大多数的建议是把你的代码用压缩器或者模糊处理(obfuscatorprograms)软件打包,但得到的效果其实是可以忽略不计的。随后,一个建议引起了我的注意,那就是把图片格式全部使用JPEG。我使用TextureAtlas自动打包所有资源,但我可以把这些图片和没有透明区域的地方分隔开,然后把它们作为PNG或者JPG图片集分别打包。然而问题是,我游戏当中90%的图片都是需要透明度的,在这种情况下我们最主要的问题就是卡牌图片,这些图片都有圆角。随后我想到了这个想法:把这些卡牌图片分为框架和内容,这款游戏中只有4种卡牌类型,所有同类的卡牌都有相同的框架。卡牌内部每一个都是不同的,但这些内容都不要求透明度。我并没有把126张卡片打包成PNG图片,而是全部做成了JPG图片,外加4张PNG框架图。在分步处理图片的时候,确保JPG图片首先被画出来,PNG框架覆盖其上。顺便提一句,我说的分步处理指的是把图形放到libGDXStage(Group)当中。为了让代码更简单,我创作了Cardimage类(class)来处理透明化的绘图,这个Group包含来自JPG图片的卡牌中心,然后把来自PNG图片的框架覆盖其上。这节约了大量的空间,但我还担心在做翻转动作的时候导致包体过大。当卡牌面向左边或者右边的时候,我会直接把这张图翻过来,这样就会节约空间,因为我不必存储完整的卡牌图像。我尝试过能否只翻转一部分图像,这可能要使用AtlasRegion.flip()函数,但我不想翻转完整的JPG图像,这些图片部分应该保持相同,而且只有完整的图形才需要展示出来,为此,在callingflip(true,false)之后,我使用了setRegionY和setRegionHeight缩减翻转区域的大小,通过使用翻转区域,我创造了另一个图形而且把它加入到了CardImaeggroup里,在运行的时候,我只需要简单地展示或者隐藏这个图片就可以了。结果新方法创作出来的apk文件在包含了同样内容的情况下,大小降到了12MB,也就是说这个处理节约了88%的空间。加入了其他四种分辨率之后,apk包体降到了42MB,和此前预计的300MB相差9倍多。总结除了你能够在网上找到的所有其他建议之外,比如压缩代码等等,还需要增加以下三条:1.在可能的情况下尽量使用JPG格式的图片;2.如果你使用PNG只是为了半透明边框,最好是把图片剪裁成边框+内容的方式,把框架用PNG存储,内容用JPG存储。或者,还可以用更换高的方式:把边框建材城四部分(左右上下),然后在运行的时候把它们组合起来,不要在PNG框架中增加更多的空间,这样不仅可以节约存储量,还可以使用更少的图片,所以游戏运行会更快。3.如果你的图片需要翻转或者旋转,那么你只需要存储初始版本,然后在运行的时候进行翻转或者旋转即可。