CPU(计算)+RAM(内存)+ROM(内置存储卡)+ GPU(图像处理等)等参数。
手机芯片制造商高通;英特尔Intel芯片,服务器芯片。
> CPU类型与SO文件
-- 手机的CPU,多核,32Bit CPU,64Bit CPU;
Android 的ARM架构和X86架构- http://blog.csdn.net/victor_barnett/article/details/79446137
早期的Android系统几乎只支持ARMv5的CPU架构,而现在Android平台支持7种不同的CPU架构,他们分别是ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(Application Binary Interface)。 64位的CPU架构总能向下兼容其对应的32位指令集,如:x86_64兼容X86,arm64-v8a兼容armeabi-v7a,mips64兼容mips;
对于CPU来说,不同的架构并不意味着一定互不兼容;Android共支持七种不同类型的CPU架构,其兼容特点可总结如下:
armeabi设备只兼容armeabi;
armeabi-v7a设备兼容armeabi-v7a、armeabi;
arm64-v8a设备兼容arm64-v8a、armeabi-v7a、armeabi;
X86设备兼容X86、armeabi;
X86_64设备兼容X86_64、X86、armeabi;
mips64设备兼容mips64、mips;
mips只兼容mips;
目前市场份额而言,绝大部分的设备都已经是armeabi-v7a、arm64-v8a,你也可以考虑只保留armeabi-v7a架构的SO文件,这样能获得更好的性能效果。性能差异比较明显加入单的的so文件并在代码中去判断。
Android arm 架构注重的是续航能力 ;x86 架构注重的是性能 。
在Android系统上,每一个CPU架构对应一个ABI:armeabi;armeabi-v7a;x86;mips;arm64-v8a;mips64;x86_64
-- Android 相关七种 CPU 架构适配- https://blog.csdn.net/Kester_/article/details/71055901
NDK 开发时会涉及到 CPU 架构的适配,不同的机器上可能会有不同的 CPU 架构,也就是说,翻译到机器上使用的规则
不一样,Android 上有7种 CPU 架构:1.armeabi ;2.armeabi-v7a ;3.arm64-v8a ;4.x86 ;5.x86_64 ;6.MIPS ;7.MIPS64
从厂家上来分是有三种,arm,x86,MIPS,arm 系列是绝大多数手机上使用的,x86 主要是运用在平板上,而 MIPS 基
本上就没见过。正常来说只使用 armeabi-v7a 就可以适配基本所有手机了,因为现在手机基本上都支持这种CPU架构。
-- CISC(复杂指令集)和RISC(精简指令集)在很多方面都有所差异:
RISC的设计重点在于降低由硬件执行指令的复杂度,因为软件比硬件容易提供更大的灵活性和更高的智能,因此RISC设计对编译器有更高的要求;CISC的设计则更侧重于硬件执行指令的功能,使CISC的指令变得很复杂。总之RISC对编译器的要求高,CISC强调硬件的复杂性,CPU的实现更复杂。
1.指令集----RISC处理器减少指令集的种类,通常一个周期一条指令,也就是说指令的周期是固定的,编译器或程序员通过几条指令完成一个复杂的操作;CISC的指令长度通常不固定。
2.流水线----流水线的本质就是CPU并行运行,只是并行运行不像FPGA中的那么直接,它只是把一条指令分成几个更小的执行单元;CISC指令的执行需要调用一个微程序,明显没有RISC的指令吞吐量大。
3.寄存器----RISC的寄存器拥有更多的通用寄存器,寄存器操作较多,例如ARM具有27个寄存器,CISC的寄存器都是用于特定目的的。
4.Load-store结构----处理器只处理寄存器中的数据,这是因为访问存储器很耗时,同时对外部存储器的读写会影响其寿命;CISC能够在存储器中直接运行
5.寻址方式简化,不像CISC那样的复杂众多的寻址方式
-- 目前在iOS设备上的CPU指令为一下几种:
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
arm64(注:无armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、 iPhone 7 、iPhone 7 Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3、iPad mini4、iPad Pro。
-- SO文件
Android SO文件的兼容和适配- http://blog.coderclock.com/2017/05/07/android/Android-so-files-compatibility-and-adaptation/
根据以上的兼容总结,我们还可以得到一些规律:
armeabi的SO文件基本上可以说是万金油,它能运行在除了mips和mips64的设备上,但在非armeabi设备上运行性能还是有所损耗;
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a','x86', 'x86_64'
}
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi'//, 'armeabi-v7a', 'arm64-v8a','x86', 'x86_64'
}
-- 通过下面的配置来制定支持的ABI:
TARGET_CPU_API := all APP_ABI := all或者是
TARGET_CPU_API := armeabi armeabi-v7a x86 x86_64 arm64-v8a mips mips64 APP_ABI := armeabi armeabi-v7a x86 x86_64 arm64-v8a mips mips64
开发Android应用时,有时候Java层的编码不能满足实现需求,就需要到C/C++实现后生成SO文件,再用System.loadLibrary()加载进行调用,这里成为JNI层的实现。常见的场景如:加解密算法,音视频编解码等。
就目前市场份额而言,绝大部分的设备都已经是armeabi-v7a、arm64-v8a,你也可以考虑只保留armeabi-v7a架构的SO文件,这样能获得更好的性能效果。
> 手机IMEI的构成规则,手机IMEI码由15-17位数字组成:
第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码,该代码由GSMA及其授权机构分配。其中TAC码前两位又是分配机构标识(Reporting Body Identifier),是授权IMEI码分配机构的代码,如01为美国CTIA,35为英国BABT,86为中国TAF。
第二部分 FAC,Final Assembly Code,最终装配地代码,由2位数字构成,仅在早期TAC码为6位的手机中存在,所以TAC和FAC码合计一共8位数字。FAC码用于生产商内部区分生产地代码。
第三部分 SNR,Serial Number,序列号,由第9位开始的6位数字组成,区分每部手机的生产序列号。
第四部分 CD,Check Digit,验证码,由前14位数字通过Luhn算法计算得出。
第五部分 SVN,Software Version Number,软件版本号,区分同型号手机出厂时使用的不同软件版本,仅在部分品牌的部分机型中存在。
-- “求一个HTC手机的IMEI”
金立手机 IMEI:8625 8302 7073 776
oppo手机 IMEI:8629 6503 3916 272,IMEI2:8629 6503 3916 264
三星手机 IMEI:3499 4566 1188 460(2),3529 9305 8134 818,3562 0505 9148 432,3574 4505 2236 185
联想手机 IMEI:8609 8803 0355 288,IMEI2:8609 8803 0355 296
诺基亚手机IMEI:3533 8409 9184 716,IMEI:3533 8409 9184 718, 351939054167774
魅族手机 IMEI1:8651 7603 2647 226,IMEI2:8651 7603 2647 234
vivo手机 IMEI:8686 0204 4746 778,IMEI2:8686 0204 4746 760
iOS手机 UUID:755881A5-1736-4CAB-A74E-422CE2738423
小米手机IMEI:863020013056431
华为手机IMEI:865744020052795
一加手机的IMEI:
锤子手机的IMEI:
中兴手机的IMEI:867354001422255,861603000178797,866335010729773,862130029790542,865310617170964,868447013461623
HTC手机的IMEI:357568014194505,359788040956007,354974045750138,352666046665008
360手机的IMEI:
public String getAndroidIMEI() {
String imeiArray[] = {"862583027", "862965033", "349945661", "860988030", "353384099", "865176032", "868602044", "863020013", "865744020"
, "351939054", "352993058", "356205059", "357445052", "867354001", "861603000", "866335010", "862130029", "865310617", "357568014"
, "359788040", "354974045", "352666046", "868447013"};
int index = (int) (Math.random() * imeiArray.length);
String random = imeiArray[index];
String sixNum = (int) ((Math.random() * 9 + 1) * 100000) + "";
return random + sixNum;
}
public String getiOSuuid() {
String origin = "755881A517364CABA74E422CE2";
String sixNum = (int) ((Math.random() * 9 + 1) * 100000) + "";
return origin + sixNum;
}