当前位置:首页 » 编程软件 » aosp编译指定gcc

aosp编译指定gcc

发布时间: 2023-05-10 02:13:10

❶ 大牛们是怎么阅读 Android 系统源码

由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源码上花费了不少功夫, Application端和Services端都看和改了不少.
如果只是想看看一些常用类的实现, 在Android包管理器里把源码下载下来, 随便一个IDE配好Source Code的path看就行.
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结.

知识
java
Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
熟练的Android App开发
linux
Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
Make
AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
Git
AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
C++
Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).

硬件
流畅的国际网络
AOSP代码下载需要你拥有一个流畅的国际网络. 如果在下载代码这一步就失去耐心的话, 那你肯定没有耐心去看那乱糟糟的AOSP代码. 另外, 好程序员应该都会需要一个流畅的Google.
一台运行Ubuntu 12.04的PC.
如果只是阅读源码而不做太多修改的话, 其实不需要太高的配置.
一台Nexus设备
AOSP项目默认只支持Nexus系列设备. 没有也没关系, 你依然可以读代码. 但如果你想在大牛之路走的更远, 还是改改代码, 然后刷机调试看看吧.
高品质USB线
要刷机时线坏了, 没有更窝心的事儿了.
软件
Ubuntu 12.04
官方推荐, 没得选.
Oracle Java 1.6
注意不要用OpenJDK. 这是个坑, 官方文档虽然有写, 但还是单独提一下.
安装:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default

Eclipse
估计会有不少人吐槽, 为什么要用这个老古董. 其实原因很简单, 合适. 刚开始搞AOSP时, 为了找到效率最优的工具, 我尝试过Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最终结果还是Eclipse. 主要优点有:
有语法分析 (快速准确的类, 方法跳转).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等调试工具.
为了提高效率, 花5分钟背下常用快捷键非常非常值得.
调整好你的classpath, 不要导入无用的代码. 因为AOSP项目代码实在是太多了. 当你还不需要看C++代码时, 不要为项目添加C++支持, 建索引过程会让你崩溃.
Intellij IDEA
开发App必备. 当你要调试系统的某个功能是, 常常需要迅速写出一个调试用App, 这个时候老旧的Eclipse就不好用了. Itellij IDEA的xml自动补全非常给力.
巨人的肩膀

这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.

这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.

此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
早期的博客是基于旧版本的Android;
大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.

邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.

Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.

一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
其它
代码组织
AOSP的编译单元不是和git项目一一对应的, 而是和Android.mk文件一一对应的. 善用mmm命令进行模块编译将节省你大量的时间.
Binder
这是Android最基础的进程间通讯. 在Application和System services之间大量使用. 你不仅要知道AIDL如何使用, 也要知道如何手写Binder接口. 这对你理解Android的Application和System services如何交互有非常重要的作用. Binder如何实现的倒不必着急看.
HAL
除非你对硬件特别感兴趣或者想去方案公司上班, 否则别花太多时间在这一层.
CyanogenMod
这是一个基于AOSP的第三方Rom. 从这个项目的wiki里你能学到很多AOSP官方没有告诉你的东西. 比如如何支持Nexus以外的设备.
DIA
这是一个Linux下画UML的工具, 能够帮你梳理看过的代码.
XDA

这里有最新资讯和最有趣的论坛.
想到了再补充.

❷ Android aosp源码编译后root权限问题

ROOT获得最高权限是删除这些应用的唯一途径
实际手动操作的流程非常复杂,并且有版本限制
我推荐你款不错的手机ROOT工具吧,
我一直都是在用的,很不错
使用应用宝获取手机root权限在工具
选项里找到一键ROOT即可或者KINGROOT也行。

❸ 解决ubuntu编译aosp报错问题:error while loading shared libraries: libncurses.so.5

报错如下:

解决方案:安装libncurses5解决,命令如下

❹ android studio里的ndk toolchains问题,请问怎么解决

我用的是android studio 1.5的版本,所以gradle配置相比旧旦悉燃版本有了不少变化。可参考如下文档

http://tools.android.com/tech-docs/new-build-system/gradle-experimental

首先贴出我的完整gradle配置,让大陆困家有个模虚直观认识

apply plugin: 'com.android.model.application'

model{
android {
compileSdkVersion = 19
buildToolsVersion = "22.0.1"

defaultConfig.with {
applicationId = "com.example.testhook"
minSdkVersion.apiLevel = 10
targetSdkVersion.apiLevel = 19
versionCode = 1
versionName = "1.0"
}
}

android.packagingOptions {
pickFirst 'lib/armeabi-v7a/libtest.so'
pickFirst 'lib/x86/libtest.so'
}

android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.pro')

ndk.with {
CFlags += ["-O3"]
cppFlags += ["-DNDEBUG", "-O3"]
}
}
}

android.ndk {
moleName = "test"

toolchain = "gcc"
toolchainVersion = "4.9"

cppFlags += ["-DPLATFORM_SDK_VERSION=14", "-DHAVE_LITTLE_ENDIAN", "-D__ARM_ARCH_7__"]
ldLibs += ["cutils","utils", "binder", "android_runtime", "dvm", "stlport", "dl"]

abiFilters += ["x86"]
abiFilters += ["armeabi-v7a"]

def android_branch = "android-2.3.3_r1.1";

ldFlags += "-L${getRootDir()}/dexposed-AOSP/${android_branch}/jniLibs/x86".toString()
ldFlags += "-L${getRootDir()}/dexposed-AOSP/${android_branch}/jniLibs/armeabi-v7a".toString()

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkDir = properties.getProperty('ndk.dir')

cppFlags += "-I${ndkDir}/sources/cxx-stl/stlport/stlport".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/dalvik".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/dalvik/vm".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/external/stlport/stlport".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/bionic".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/bionic/libstdc++/include".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/system/core/include".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/frameworks/native/include".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/frameworks/base/include".toString()
cppFlags += "-I${getRootDir()}/dexposed-AOSP/${android_branch}/include/libnativehelper/include".toString()
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/commons-lang3-3.4.jar')
}

有几点需要注意:

一、如果这是个library,则第一行应改为
apply plugin: ‘com.android.model.library’

二、框架整体的build.gradle中要改成如下
classpath ‘com.android.tools.build:gradle-experimental:0.2.0’

三、gradle-wrapper.properties里要改成gradle-2.5,如下
distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip

四、编译cpp时提示以下错误,而在c中就没有这个问题
java.lang.UnsatisfiedLinkError: Native method not found

解决办法,在函数前面加上extern “C”,如下

extern "C" JNIEXPORT JNICALL jstring
Java_com_example_testhook_Tester_getName(JNIEnv *env, jclass object) {
return env->NewStringUTF("hello world!");
}

五、接下来,最重要的是,如果我需要引用到android内核框架中的某些功能,该怎么做呢?

首先要引用android内核中对应模块的so文件,然后包含其头文件并一起编译。而要得到内核模块的so文件,需要先下载并编译android内核。而引用so和头文件都是在gradle中配置的,分别对应的是ldFlags和cppFlags。注意,如果是C文件,则为CFlags,否则会提示找不到头文件。

❺ Android Studio 3.5导入AOSP编译的classes.jar

一、适用场景

    我们在写应用时可能会需要调用系统隐藏的API,这些API是我们无法直接访问的,报如下错误:

 此时,我们需要将系统AOSP的out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar导入到Android Studio中,使app能够访问这些接口。

二、实现步骤

Step1 . 在app目录下建立libs文件夹,并将classes.jar包放入该路径

Step2 .在app目录上右键【Open Mole Settings】,点击左侧【Dependencies】,选择app,点击【+】选择【2 Jar Dependency】,添加

选择我们的libs/classes.jar,点击【OK】

Step3 .在Mole的build.gradle中,dependencies自动增加依赖配置,注释掉下面一行

implementation fileTree(dir: 'libs', include: ['*.jar'])  

并将implementation files('libs/classes.jar')改为

compileOnly files('libs/classes.jar')

最终如下图所示

Step4 .修改Project的build.gradle,在allProjects中增加如下语句

    gradle.projectsEvaluated {

        tasks.withType(JavaCompile) {

            options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\classes.jar')

        }

    }

Step5 .修改jar包优先级,在Moels的app.iml文件中找到我们的classes.jar包所在行,

<orderEntry type="library" name="Gradle: __local_aars__:/Users/mrwong/AndroidStudioProjects/uart_daemon/app/libs/classes.jar:unspecified@jar" level="project" />

将其移动到

<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />

这一行之上,最终如下图所示:

至此,app可以优先访问我们自己的jar包 。

❻ 自己可以编译安卓源码吗

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    ❼ aosp系统怎么样

    AOSP 全名为 Android Open-Source Project,中文为安卓开源项目,开源即开放源代码!Android 是一个基于 Linux 的、由 Google 主导的开源系统。严格意义上来说,Android=AOSP+GMS,那么这个GMS又是什么呢?GMS 全名为 Google Mobile Service,即谷歌移动服务,也就是我们常刷的谷歌服务包。由于你懂的原因,国内无法使用 GMS,所以国内的各种定制 ROM 都是 AOSP 的定制修改加上自家的云服务,比如 MIUI、ColorOS 等!所以,所有的 ROM 最终的根源就是 AOSP,没有AOSP,也就没有现在的 Androi关于 CM,全名为 CyanogenMod,全球最大的第三方 ROM 编译团队。CM 是基于 AOSP 进行二次开发,在 AOSP 的基础上添加功能、适配更多机型、编写众多机型的内核和驱动!CM 是在底层多 AOSP 进行改进,并且遵循 Android 设计规范,所以 UI 与交互方面,与 AOSP 保持一致,所以很多人说的CM的UI应该

    ❽ Android学习之Build环境介绍


    这里略过对android在手机上的文件系统框架的阐述(google或者都能帮助你找到对应的信息),主要看google是如何把生成合适的rootfs的工作整合到它的build体系当中,同时,会顺带看一下CyanogenMod中对应各种机型的build机制。
    首先,来看一下Android的build系统中,使用到的编译选项和相关工具
    具体的目录在:mydroid/build/tools/下
    |-- acp
    这是一个稍微改良的cp命令,用来应付在windows/MAC/Linux下的cp命令的缺陷,其中的README很值得一看!
    |-- adbs
    这是一个用来查看crash问题的工具,详细请看《Android调试工具之adbs》
    |-- Android.mk
    |-- apicheck
    用来进行发布前的API检查(参见mydroid/build/core/tasks/apicheck.mk),是否新编译的系统中有破坏API兼容性或是非法的API
    这里的代码是用Java写的用来检查编译时生成的API相关信息的xml文件(mydroid/framework/base/api/中),可以参考里面对于xml文件解析的代码
    |-- apriori
    实现prelink的工具,简单介绍参见(mydroid/bionic/linker/README.TXT)
    |-- atree
    为android SDK服务的一个工具,用来按照指定xxx.atree文件中的内容进行一些文件操作
    |-- bin2asm
    不太明白具体的用处,应该是用来应付mac上编译android一些与gcc相关的问题
    |-- buildinfo.sh
    生成target中的各种xxx.prop文件,如system.prop, build.prop等
    |-- check_builds.sh
    包装了diff,用来看2个发布版本之间变化
    |-- check_prereq
    device上进行ota升级时的工具之一
    |-- compare_fileslist.py
    与check_builds.sh配合完成版本比较的脚本
    |-- droiddoc
    Android更具javadoc的一些移植
    |-- mp-package-stats
    简单的查看一个jar/apk文件内的dex和其它文件的大小信息
    |-- event_log_tags.py
    处理event-log-tags的内容,关于event-log-tags文件的意义参见《Android学习之event-log-tags是神马》
    |-- fileslist.py
    简化的列出指定目录下所有文件及大小的脚本 -- 可以放入自己的工具库了使用:)
    |-- findleaves.py
    在指定目录中(可多个)找指定文件的脚本 -- 可以放入自己的工具库了使用:)
    |-- fixlinebreaks.sh
    把windows中的换行改为linux下的 -- 可以放入自己的工具库了使用:大散芦)
    |-- fs_config
    列出指定文件夹滚带及文件的权限
    |-- fs_get_stats
    得到指定文件夹下文件的简单stats信息
    |-- iself
    判断文件是否是ELF格式
    |-- isprelinked
    判断文件是否是prelink过的
    |-- java-event-log-tags.py
    处理event-log-tags的内容,关于event-log-tags文件的意义参见《Android学习之event-log-tags是神马》
    |-- kcm
    key character map的工具, 相关资料参照:
    |-- lsd
    !!!!!! ???
    |-- merge-event-log-tags.py
    处理event-log-tags的内容,关于event-log-tags文件的意掘野义参见《Android学习之event-log-tags是神马》
    |-- mktarball.sh
    与fs_get_stats配合而执行的打包工具
    |-- print_mole_licenses.sh
    显示当前目录下所有mole信息
    |-- releasetools
    -- check_target_files_signatures
    |-- common.py
    |-- edify_generator.py
    |-- img_from_target_files
    |-- ota_from_target_files
    `-- sign_target_files_apks
    |-- rgb2565
    rgb转换工具
    |-- signapk
    命令行下对jar包签名的工具
    |-- soslim
    Android定制的编译工具之一,简单介绍参见(mydroid/bionic/linker/README.TXT)
    |-- warn.py
    解析Android系统编译log的工具
    `-- zipalign
    zipfile的对齐工具,参见该文件夹下的README.TXT
    #p#副标题#e#
    在来看看Android编译系统中定义的一些通用XXX.mk文件
    mydroid/build/core/
    |-- armelflib.x
    |-- armelf.x
    |-- armelf.xsc
    |-- base_rules.mk
    |-- binary.mk
    |-- build_id.mk
    |-- build-system.html
    |-- checktree
    |-- cleanbuild.mk
    |-- cleanspec.mk
    |-- clear_vars.mk
    |-- combo
    |-- config.mk
    |-- _headers.mk
    |-- definitions.mk
    |-- device.mk
    |-- dex_preopt.mk
    |-- distdir.mk
    |-- droiddoc.mk
    |-- mpvar.mk
    |-- dynamic_binary.mk
    |-- envsetup.mk
    |-- executable.mk
    |-- filter_symbols.sh
    |-- find-jdk-tools-jar.sh
    |-- help.mk
    |-- host_executable.mk
    |-- host_java_library.mk
    |-- host_native_test.mk
    |-- host_prebuilt.mk
    |-- host_shared_library.mk
    |-- host_static_library.mk
    |-- java_library.mk
    |-- java.mk
    |-- legacy_prebuilts.mk
    |-- main.mk
    |-- Makefile
    |-- multi_prebuilt.mk
    |-- native_test.mk
    |-- node_fns.mk
    |-- notice_files.mk
    |-- package.mk
    |-- pathmap.mk |-- phony_package.mk
    |-- prebuilt.mk
    |-- process_wrapper_gdb.cmds
    |-- process_wrapper_gdb.sh
    |-- process_wrapper.sh
    |-- proct_config.mk
    |-- proct.mk
    |-- proguard.flags
    |-- proguard_tests.flags
    |-- raw_executable.mk
    |-- raw_static_library.mk
    |-- root.mk
    |-- shared_library.mk
    |-- static_java_library.mk
    |-- static_library.mk
    |-- tasks
    |-- user_tags.mk
    `-- version_defaults.mk
    #p#副标题#e#
    这里,目录在mydroid/build/core/tasks/有一些特别的task
    |-- apicheck.mk, 判断api是否符合AOSP的规范
    |-- cts.mk cts测试, 可以在代码根目录, make cts, 编译结束之后,进入out/host/linux-x86/bin/下,执行cts命令
    |-- ide.mk IDE开发环境
    |-- proct-graph.mk
    `-- sdk-addon.mk
    NDK的build环境没有包含在标注难得AOSP的/build/目录下
    而是在mydroid/ndk/build下
    $ cd ndk/build/tools
    $ export ANDROID_NDK_ROOT=aosp-root/ndk
    $ ./make-release --help
    一些小技巧
    如何显示每次编译所包含的所有xxx.mk文件
    找到build/core/main.mk
    把include $(subdir_makefiles)替换为
    [plain] view plain $(foreach subdir_makefile, $(subdir_makefiles),
    $(info Including $(subdir_makefile))
    $(eval include $(subdir_makefile)))
    subdir_makefile :=
    如果遇见API相关的PACKAGING/checkapi-current-timestamp] Error 38
    需要执行:make update-api
    如何在AOSP代码目录之外编译
    [plain] view plain # Paths and settings
    TARGET_PRODUCT = generic
    ANDROID_ROOT = /home/karim/android/aosp-2.3.x
    BIONIC_LIBC = $(ANDROID_ROOT)/bionic/libc
    PRODUCT_OUT = $(ANDROID_ROOT)/out/target/proct/$(TARGET_PRODUCT)
    CROSS_COMPILE =
    $(ANDROID_ROOT)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
    # Tool names
    AS = $(CROSS_COMPILE)as
    AR = $(CROSS_COMPILE)ar
    CC = $(CROSS_COMPILE)gcc
    CPP = $(CC) -E
    LD = $(CROSS_COMPILE)ld
    NM = $(CROSS_COMPILE)nm
    OBJCOPY = $(CROSS_COMPILE)obj
    OBJDUMP = $(CROSS_COMPILE)objmp
    RANLIB = $(CROSS_COMPILE)ranlib
    READELF = $(CROSS_COMPILE)readelf
    SIZE = $(CROSS_COMPILE)size
    STRINGS = $(CROSS_COMPILE)strings
    STRIP = $(CROSS_COMPILE)strip
    export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF
    SIZE STRINGS STRIP
    # Build settings
    CFLAGS = -O2 -Wall -fno-short-enums
    HEADER_OPS = -I$(BIONIC_LIBC)/arch-arm/include
    -I$(BIONIC_LIBC)/kernel/common
    -I$(BIONIC_LIBC)/kernel/arch-arm
    LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker
    $(PRODUCT_OUT)/obj/lib/crtbegin_dynamic.o
    $(PRODUCT_OUT)/obj/lib/crtend_android.o
    -L$(PRODUCT_OUT)/obj/lib -lc -ldl
    # Installation variables
    EXEC_NAME = example-app
    INSTALL = install
    INSTALL_DIR = $(PRODUCT_OUT)/system/bin
    # Files needed for the build
    OBJS = example-app.o
    # Make rules
    all: example-app
    .c.o:
    $(CC) $(CFLAGS) $(HEADER_OPS) -c {1}lt;
    example-app: ${OBJS}
    $(CC) -o $(EXEC_NAME) ${OBJS} $(LDFLAGS)
    install: example-app
    test -d $(INSTALL_DIR) || $(INSTALL) -d -m 755 $(INSTALL_DIR)
    $(INSTALL) -m 755 $(EXEC_NAME) $(INSTALL_DIR)
    clean:
    rm -f *.o $(EXEC_NAME) core
    distclean:
    rm -f *~
    rm -f *.o $(EXEC_NAME) core
    如何增加一个新的设备
    [plain] view plain $ cd ~/android/aosp-2.3.x
    $ . build/envsetup.sh
    $ mkdir -p device/acme/coyotepad
    $ cd device/acme/coyotepad
    进入AndroidProcts.mk
    PRODUCT_MAKEFILES :=
    $(LOCAL_DIR)/full_coyotepad.mk
    对于full_coyotepad.mk
    $(call inherit-proct, $(SRC_TARGET_DIR)/proct/languages_full.mk)
    $(call inherit-proct, $(SRC_TARGET_DIR)/proct/full.mk)
    DEVICE_PACKAGE_OVERLAYS :=
    PRODUCT_PACKAGES +=
    PRODUCT_COPY_FILES +=
    PRODUCT_NAME := full_coyotepad
    PRODUCT_DEVICE := coyotepad
    PRODUCT_MODEL := Full Android on CoyotePad, meep-meep
    在BoardConfig.mk中
    TARGET_NO_KERNEL := true
    TARGET_NO_BOOTLOADER := true
    TARGET_CPU_ABI := armeabi
    BOARD_USES_GENERIC_AUDIO := true
    USE_CAMERA_STUB := true
    打开vendorsetup.sh
    add_lunch_combo full_coyotepad-eng
    #p#副标题#e#

    ❾ ubuntu/mac android aosp源码编译遇到的坑

    以上是编译aosp问题总结
    ========================分割线==========================

    直接在命令行中设置临时变量就行

    以上是刷机问题总结
    ========================分割线==========================

    ❿ 编译aosp为什么要安装gcc

    如果你的源程序是 C 语言的话,而你又是在 LINUX 系统下开发程序,那你就必须使用 gcc 编译器;如果你是在 UNIX 系统下开发 C 语言源程序,那么就要使用 cc 编译器。所以说,最关键的还是要看你的软件开发平台。

    热点内容
    电信光纤上传限制 发布:2024-05-18 16:08:05 浏览:909
    sql中的limit 发布:2024-05-18 16:05:57 浏览:895
    启动ug时服务器无响应是怎么回事 发布:2024-05-18 15:48:24 浏览:372
    小数除法的计算法则 发布:2024-05-18 15:36:52 浏览:530
    安卓网卡免驱动如何实现 发布:2024-05-18 15:25:15 浏览:860
    8加6算法 发布:2024-05-18 15:04:25 浏览:738
    名图16款尊享什么配置 发布:2024-05-18 14:55:37 浏览:585
    我的世界怎样刷出32k服务器 发布:2024-05-18 14:32:32 浏览:565
    c语言程序设计江宝钏 发布:2024-05-18 14:32:22 浏览:780
    右击文件夹总是转圈圈 发布:2024-05-18 14:31:10 浏览:696