Edison's NoteSsss

Everything about me

Category: Mac

Compiler Android 4.2 for Nexus 7 in Mac 10.8.2 with Xcode 4.5

上周托朋友在Amazon上买了一台 Nexus7 这周就能到手

再到手之前照例要做功课,其实买来之前就已经研究过很久了,当时犹豫是要Ipad mini还是搞Nexus7, 只有又一次路过Yodubashi实际摸了摸mini之后,感觉还是来个实用的有乐趣设备吧,能拿到完整source code对我这种靠Android吃饭的人来说是很巨大的吸引力啊。。。于是。。搞了!

既然订单下了,那就要开始搞source code和编译了。其实编译环境完全没有压力,我有以前工作用的完整的ubuntu虚拟机编译环境,但是这次我觉得可以搞一下Mac原生的编译环境。。AOSP对Mac的支持还是很友好的,不像某些无良公司。。。完全没有Mac的编译支持!

决定了那开始下代码搞起 先按照Android官网的配置搞定大概的编译环境,很简单不多说,网站列一下

  • http://source.android.com/source/initializing.html

然后开始下载代码(我尝试过使用打了tag的4.1.2分支和4.2分支都失败了。。最后都是用master编过的。。所以我劝大家如果要搞的话安安稳稳的用master吧。。。)

  • repo init -u https://android.googlesource.com/platform/manifest
  • repo sync -j8

 

12-21 ** FIX **
还需要去网站下载二进制驱动包打入source中,下载地址:
https://developers.google.com/android/nexus/drivers#grouperjop40c
否则会出现无法启动的情况。。。

之后就是常规编译步骤了

  • . ./build/envsetup.sh
  • lunch full_grouper-userdebug
  • make all -j8 (如果不想用apple llvm编译的话 可以使用 make CC=”gcc-apple-4.2″ CXX=”g++-apple-4.2″ -j8)

我的编译选项的输出如下:

 lunch full_grouper-userdebug  
============================================  
PLATFORM_VERSION_CODENAME=AOSP 
PLATFORM_VERSION=4.2.42.42.42 
TARGET_PRODUCT=full_grouper 
TARGET_BUILD_VARIANT=userdebug 
TARGET_BUILD_TYPE=release 
TARGET_BUILD_APPS= 
TARGET_ARCH=arm 
TARGET_ARCH_VARIANT=armv7-a-neon 
HOST_ARCH=x86 HOST_OS=darwin 
HOST_OS_EXTRA=Darwin-12.2.0-x86_64-i386-64bit 
HOST_BUILD_TYPE=release BUILD_ID=JB_MR1 OUT_DIR=out 
============================================= 

需要注意的是 如果你使用10.6以上的Mac版本(现在使用10.6以下的也不多了吧。。。) 需要先export一个环境变量

 build/core/combo/HOST_darwin-x86.mk:62: 
**************************************************** 
* build/core/combo/HOST_darwin-x86.mk:63: 
* Cannot find SDK 10.6 at 
*    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk 
*    build/core/combo/HOST_darwin-x86.mk:65: 
* If you wish to build using higher version of SDK, build/core/combo/HOST_darwin-x86.mk:66: 
* try setting BUILD_MAC_SDK_EXPERIMENTAL=1 before build/core/combo/HOST_darwin-x86.mk:67: 
* rerunning this command build/core/combo/HOST_darwin-x86.mk:69: 
***************************************************** 
build/core/combo/HOST_darwin-x86.mk:70: 
*** Stop.. Stop. 

按照提示

  • export BUILD_MAC_SDK_EXPERIMENTAL=1

然后就可以开始正常编译 编译完成后可以在$OUT目录找到生成的img文件 我的out目录的ll如下:

 total 823584 
-rw-r--r-- 1 edison staff 22 Nov 15 10:17 android-info.txt 
-rw-r--r-- 1 edison staff 5113856 Nov 15 11:05 boot.img 
-rw-r--r-- 1 edison staff 25701 Nov 15 11:49 clean_steps.mk 
drwxr-xr-x 2 edison staff 68 Nov 15 10:16 data 
-rw-r--r-- 1 edison staff 113699883 Nov 15 11:52 full_grouper-ota-eng.edison.zip 
-rw-r--r-- 1 edison staff 44690 Nov 15 11:15 installed-files.txt 
-rw-r--r-- 1 edison staff 4871932 Nov 15 10:41 kernel 
drwxr-xr-x 12 edison staff 510 Nov 15 11:15 obj 
-rw-r--r-- 1 edison staff 602 Nov 15 11:49 previous_build_config.mk 
-rw-r--r-- 1 edison staff 766760 Nov 15 11:05 ramdisk-recovery.img 
-rw-r--r-- 1 edison staff 237689 Nov 15 11:05 ramdisk.img 
drwxr-xr-x 3 edison staff 102 Nov 15 11:05 recovery 
-rw-r--r-- 1 edison staff 5642240 Nov 15 11:05 recovery.img 
drwxr-xr-x 8 edison staff 816 Nov 15 11:05 root 
drwxr-xr-x 4 edison staff 170 Nov 15 11:05 symbols 
drwxr-xr-x 13 edison staff 476 Nov 15 11:11 system 
-rw-r--r-- 1 edison staff 184454092 Nov 15 11:15 system.img 
-rw-r--r-- 1 edison staff 106788356 Nov 15 11:05 userdata.img 

其中的full_grouper-ota-eng.edison.zip 是用otapackage编出来的 暂时还没搞明白用途。。。。

  • make otapackage -j8

我使用master分支 基本都是一次编过 没有任何编译错误 但是使用打了tag的分支 没有一次能顺利编过的。。。。

好了 先写这些 等拿到了nexus7 再继续写烧机的经过吧

objective-c 之歌 最简单最快速的objective-c教程

刚才随便乱看看到的 看起来很有趣 就转来记录一下

转自:http://iammr.7.blog.163.com/blog/static/4910269920093914452407/

C没有类
这让人很疲惫
对象的说法很时髦
不就是继承封装组合人人会
右走是C++,这个大众都熟悉它
左走就是objective-c,躲在僻静僻静的麦金塔
本是同根生的C
如何高举面向对象的大旗
求同存异标新立异且听一一细分清

对象的C
是不同的C
类的处理与众不同重点要区分

不重复是我的口头禅
任何时候我只说一次告诉你我的地盘
[@begincommand] | @end就是我的指示
@interface classname 声明类
@implementation classname 实现类
@protocol interfacename 声明接口
就是这么简单,你的一定要明白

我先声明对成员变量和方法的关系有远近
成员变量大大括在我的怀
关系远近 public / protected / private 来区分
若不声明全默默受着保护
静态成员变量请不要放在此
成员方法我不太爱
前面拴着绳子置于类的变量列表外
减号就是普通函数
加号就是静态函数莫怪
函数的声明有点怪
我要一眼叫出名,包括函数名和参数名
其余的类型括起来,我有空再来慢慢看
函数名和参数名之间用:分隔开
多个参数的函数那就是更怪
逗号其实不是我的爱
后续的每个参数分隔用空白
每个参数形式如 标签:(参数类型)参数名
其实只要把函数名看作是第一个参数标签
你就能领悟其中的奥妙并在调用时喜爱
成员方法太多我才懒得区分亲疏远近
它们一律都是公之于众要好好的干活
谁若不服胆敢出头犯上
就踢出头文件打入冷宫永世不能露面试试看
所有的成员方法都是虚函数
改则重载,不改就继承
不用任何标记请放心大胆随便使用

对象的类,在继承层次上考虑才显得重要
所有的类最终都继承于NSObject
因为它给你创建自己生命的方法

不继承于NSObject的只能是接口protocol
它没有成员变量只有方法
它只有声明不用实现
这点和java很相似

当然类还有一些绝活可以让你开开眼
可以动态的扩充一个类 而不总是用继承
@interface CClassA(Category)|@end
@implementation CClassA (Category)|@end
源代码外包含该 类的头文件
就可以使用该Category中的方法

也可以动态的替换一个类
但是只限于用继承类来替换基类功能
[CInheritClass poseAsClass: [CBaseClass class]];
声明之后用基类创建的对象实际上行为都是继承类

所以一个类的完整声明如下:
@interface CClassA(Category): CBaseClass<IA,IB…>
类别,基类,接口一一具全
加上静态 虚函数
所有特性和C++均可对应
再加上所独有的特性
这一特性编译类语言很少有
设计得当完全可以实现动态调用dll切换功能

类的定义和使用,也有点怪
想想看一个对象的生命周期,该是如何办
创建很是别扭
这样就定义了一个类对象,
CClassName* pA = [[CClassName alloc] init];
能且只能返回对象指针
释放分为两种
自动释放声明后 [pA autorelease]; 以后可以不管
否则就必须配对 [pA release];
注意类的构造函数init可以捕获
但是析构函数却没有这点很让人意外

使用类也有多种情况
调用成员方法用中括号 int nRtn = [pA method:param1];
而静态成员方法不需要对象 int nRtn = [CClassName method];
调用成员变量还是C格式 pA->m_nCount = 1;

所有的类,都可以对应一个id类型
用来引用一个对象               id cur = sq;
或者用来引用一个对象指定的接口 id<IA> cur = sq;
然后就可以调用该对象的方法和指定接口方法

© 2017 Edison's NoteSsss

Theme by Anders NorenUp ↑