自己编译android sdk

本文提供了一套详细的步骤,指导用户如何从源代码开始自行生成Android SDK和内核,包括使用脚本自动完成下载源代码、编译生成SDK、下载并编译内核等关键步骤。此外,还介绍了如何在Windows环境下使用自定义的SDK和内核,以及如何修改和运行自定义的image文件。
如果没有真正开发板,又想深入到android framework里,或kernel里的话,就只能用android的emulator了。 但是我们下载的androidSDK没有源代码,我们没办法跟踪修改framework和kernel里的东西。
所以有了想尝试自己从头生成SDK的想法。

1. 首先下载编译android所有source code. 
具体步骤这里不再赘述,参考 http://source.android.com/download
cd mydroid
repo init -ugit://android.git.kernel.org/platform/manifest.git
reposync
一点小提示:有时候google的android服务器老是断,总不能让我们守在电脑旁边一直手工重新reposync吧,这可是需要N个小时才能下载完的啊。

我们就写个小脚本让电脑自动reposync,直到下载成功为止:
#!/bin/sh
count=0
ret=1
while [ $ret -ne 0 ]
do
repo sync
ret=$?
count=$(( $count + 1))
echo "try $count, ret:$ret"
done
echo "try $count, ret:$ret"
把上面的内容复制到一个文件里tryrepo.sh
然后修改tryrepo.sh的属性,开始自动工作吧。第二点早上应该就大功告成了
chmod a+x tryrepo.sh
./tryrepo.sh

2. 编译android,生成SDK
makesdk

漫长的等待之后,SDK生成了,在目录:mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\platforms\
在linux下面可以直接运行mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\tools\android就可以看到熟悉的android emulator启动界面。

如果想在windows XP下使用这个SDK和emulator, 最简单的方法是:
(1)自己下载一个最新的windows版本的android 2.0 SDK。
(2)把mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\platforms\下的东西复制到windows版SDK的platforms下。
(3)然后把platforms下android-2.0下tools目录下的几个.exe文件复制到自己编译的SDK目录下的tools目录下。


3.下载编译emulator的kernel
从http://android.git.kernel.org找到kernel的git地址。
mkdirkernel
cdkernel
gitclone git://android.git.kernel.org/kernel/common.git
切换到android-goldfish-2.6.29分支:
git branch -b android-goldfish-2.6.29origin/android-goldfish-2.6.29
编译kernel
cdcommon
makeCROSS_COMPILE=arm-none-linux-gnueabi- ARCH=armgoldfish_defconfig
然后复制  mydroid\kernel\common\arch\arm\boot\zImage到自己编译的SDK的image目录下,覆盖kernel-qemu

好了我们可以启动我们自己编译的SDK和kernel了。
用"android-sdk-windows\SDKSetup.exe"在自己的SDK上创建一个虚拟机myavd。
运行之,从log看到我们的kernel成功运行。
android-sdk-windows\tools>emulator.exe-avd avd_git -show-kernel
UncompressingLinux.............................................................
............................. done, booting thekernel.
Initializing cgroup subsys cpu
Linux version 2.6.29-00255-g7ca5167 (xocyan@ubuntu-omap3) (gccversion 4.3.2 (So
urcery G++ Lite 2008q3-72) ) #1 Mon Nov 23 10:34:23 CST2009


---------------------------------

Android 虚拟机运行自己编译的SDK

可以修改SDK 的 image 文件,让这些image 直接到自己编译的image 目录下面,这样可以在模拟器中直接运行自己修改、编译的image 文件了。 在修改代码之后,要执行 make sdk 来编译生成新的SDK。

  我使用的android 的版本是 1.6 的,故做如下修改使得模拟器所用的image 为编译生成的image。

  1. 到 android-sdk-windows/platforms/android-1.6 目录下把 “data", "images", "templates", "samples" 四个目录重新改个名字。

  2. 在创建软连接到这四个目录:

ln -s /myandroid/out/host/linux-x86/sdk/android-sdk-eng/platforms/android-1.6/samples samples

ln -s /myandroid/out/host/linux-x86/sdk/android-sdk-eng/platforms/android-1.6/images/ images

ln -s /myandroid/out/host/linux-x86/sdk/android-sdk-eng/platforms/android-1.6/templates templates
ln -s /myandroid/out/host/linux-x86/sdk/android-sdk-eng/platforms/android-1.6/data/  data
 这样就可以直接用虚拟机来运行自己修改编译的image 文件了。



<think>我们正在解决用户的问题:如何将Android Studio中的默认Android SDK替换为自己编译的版本。 根据引用内容,我们知道: - SDK是提供给别人调用的工具,通常以jar、so库、aar包等形式存在(引用[1])。 - 在安装Android Studio之前,可以准备好单独的Android SDK(引用[2])。 - build-tools包含一些Android平台相关的通用工具(引用[3])。 用户的需求是替换为自己编译Android SDK,这意味着用户已经通过AOSP(Android Open Source Project)编译Android系统源码,并得到了一个SDK的替代品。 步骤: 1. 编译自己的Android SDK:通过AOSP编译,得到out目录下的相关产物。但注意,AOSP编译默认生成的是系统镜像,要生成SDK需要执行特定的命令。 2. 将编译好的SDK替换Android Studio默认使用的SDK。 具体步骤: 第一步:编译Android SDK 在AOSP环境中,编译SDK的命令是: ```bash source build/envsetup.sh lunch sdk-eng # 或者选择其他sdk相关的target make sdk ``` 编译完成后,在AOSP根目录下的`out/host/linux-x86/sdk`(根据主机系统不同,目录可能不同)会生成一个zip文件,例如`android-sdk_eng.<user>_linux-x86.zip`。 第二步:解压并替换Android Studio的SDK 1. 将上述zip文件解压到一个目录,例如`/home/username/my-android-sdk`。 2. 打开Android Studio,点击File > Project Structure,在SDK Location中,将Android SDK location指向新的SDK目录。 或者,在项目的`local.properties`文件中,修改sdk.dir指向新的路径: ``` sdk.dir=/home/username/my-android-sdk ``` 注意:自己编译SDK可能不包含所有默认SDK Manager安装的组件(如Google APIs、系统映像等),因此可能需要手动补充或重新编译包含这些组件。 第三步:配置环境 - 在Android Studio中,可能需要重新下载和配置build-tools和platform-tools,因为自己编译SDK可能只包含特定版本的平台。可以通过命令行进入自己SDK的`tools/bin`目录,运行`sdkmanager`来安装需要的包。但是,自己编译SDK可能不包含sdkmanager(因为这是Google提供的工具),所以可能需要混合使用。 替代方案:只替换平台部分 - 如果只是需要替换某个特定API级别的平台(例如替换android-28),可以将自己编译的`android.jar`等文件复制到默认SDK的platforms目录下(注意备份原文件)。 注意事项: - 自己编译SDK可能不包含Google的私有API(如GMS),因此如果应用依赖Google服务,可能会出现问题。 - 编译SDK版本需要与项目的`compileSdkVersion`一致。 详细步骤: 1. **编译SDK**: 在AOSP根目录下执行: ```bash source build/envsetup.sh lunch sdk-eng # 选择sdk target,如果不存在,可以尝试 lunch 然后选择带sdk的target make sdk ``` 编译完成后,在`out/host/linux-x86/sdk`目录下找到生成的sdk zip文件。 2. **解压SDK**: ```bash unzip android-sdk_eng.<user>_linux-x86.zip -d /path/to/my-android-sdk ``` 3. **配置Android Studio使用新SDK**: - 打开Android Studio,关闭当前项目。 - 在欢迎界面,选择Configure > Project Defaults > Project Structure。 - 在“SDK Location”设置中,将“Android SDK location”指向新的路径(即/path/to/my-android-sdk)。 - 或者,在项目的`local.properties`文件中设置`sdk.dir=/path/to/my-android-sdk`(每个项目独立设置)。 4. **验证**: 重新打开项目,检查External Libraries中显示的Android API是否已经变为自己编译的版本。 5. **可能需要的额外步骤**: 由于自己编译SDK可能缺少一些工具,比如build-tools,可能需要从官方SDK中复制过来,或者通过sdkmanager安装(如果自己编译SDK中包含sdkmanager工具的话)。但注意,自己编译SDK中可能不包含sdkmanager,因为它是Google提供的工具,所以可能需要混合使用两个SDK目录(不推荐)或者自己手动补充。 替代方法:只替换平台文件 如果只是需要替换某个API级别的平台(比如android-30),那么可以只替换该平台的文件: - 在AOSP编译完成后,在`out/target/common/obj/JAVA_LIBRARIES`目录下找到对应平台的android.jar(例如framework.jar,但注意名字可能不同)以及其他的库。 - 将官方SDK中`platforms/android-30`目录下的android.jar替换为自己编译的版本(注意备份)。 但是,这种方法可能不够完整,因为SDK还包含其他资源文件。 因此,推荐使用完整替换SDK的方式,但需要确保自己编译SDK包含项目所需的所有组件。 注意:自己编译SDK可能没有经过Google的兼容性测试,使用在应用开发中可能会遇到一些兼容性问题。 相关问题: 1. 如何编译Android SDK? 2. 替换SDK后,如何解决缺少build-tools的问题? 3. 在Android Studio中,如何为不同的项目配置不同的SDK?</think>### 在 Android Studio 中替换为自定义编译Android SDK 要将默认 SDK 替换为自己编译Android SDK,请按以下步骤操作: --- #### 🔧 步骤 1: 准备自定义 SDK 1. **编译 Android 源码** 使用 AOSP (Android Open Source Project) 编译 SDK: ```bash source build/envsetup.sh lunch sdk-eng # 选择 SDK 编译目标 make sdk # 编译 SDK ``` 生成的 SDK 位于:`out/host/linux-x86/sdk/sdk/`(Linux 路径) 2. **打包 SDK 文件** 将编译产物打包为 Android Studio 可识别的结构: ```bash cd out/host/linux-x86/sdk zip -r custom_sdk.zip sdk/ # 创建便携包 ``` --- #### ⚙ 步骤 2: 配置 Android Studio 1. **替换 SDK 路径** 打开项目根目录的 `local.properties` 文件,修改路径指向自定义 SDK: ```properties # 原路径(注释掉) # sdk.dir=C\:\\Users\\user\\AppData\\Local\\Android\\Sdk # 新路径(指向自定义 SDKsdk.dir=D\:\\dev\\custom_sdk # 注意转义路径分隔符 ``` 2. **更新 Gradle 配置** 在模块的 `build.gradle` 中确认使用自定义 SDK 的 API 级别: ```groovy android { compileSdkVersion 34 # 需与自定义 SDK 版本一致 // ... } ``` --- #### 🔄 步骤 3: 刷新项目配置 1. **清理缓存** 执行 Gradle 清理命令: ```bash ./gradlew cleanBuildCache ``` 2. **重启 IDE** 在 Android Studio 中: **File > Invalidate Caches / Restart > Invalidate and Restart** 3. **验证 SDK 状态** 打开:**File > Project Structure > SDK Location** 确认路径已更新为自定义 SDK 路径: ![](https://developer.android.com/static/studio/images/project-structure-sdk-location_2x.png) --- #### ⚠ 注意事项 1. **组件兼容性** 自定义 SDK 可能缺少 Google Play 服务等闭源组件,需手动补充: ```groovy dependencies { implementation 'com.google.android.gms:play-services-location:21.0.1' } ``` 2. **工具链更新** 自定义 SDK 需包含完整工具链(adb, aapt2 等),否则需从官方 SDK 复制: ```bash # 示例:复制 build-tools cp -r official_sdk/build-tools/34.0.0 custom_sdk/build-tools/ ``` 3. **版本对齐** 确保项目的 `compileSdkVersion` 和 `targetSdkVersion` 与自定义 SDK 的 API 级别完全一致[^1]。 --- #### ✅ 验证成功 在 **External Libraries** 中检查: - 显示 `Android API <自定义版本号>` 而非官方版本 - 无缺失依赖错误 - 项目可正常编译运行 > **提示**:调试时使用 `./gradlew :app:androidDependencies` 查看依赖树,确认所有路径指向自定义 SDK[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值