• 坑爹,终于编译出android 下的hello.so 文件了。郁闷死了,粗心的人主儿。


    root@android2012-desktop:~/c210/android-samsung-dev/build# chmod 777 *
    root@android2012-desktop:~/c210/android-samsung-dev/build# ./envsetup.sh
    root@android2012-desktop:~/c210/android-samsung-dev/build# cd ..

    下面这里死活不行

    root@android2012-desktop:~/c210/android-samsung-dev# mmm ./external/hello
    未找到 'mmm' 命令,您要输入的是否是:
     命令 'mwm' 来自于包 'motif-clients' (multiverse)
     命令 'mwm' 来自于包 'lesstif-bin' (universe)
     命令 'mgm' 来自于包 'mgm' (universe)
     命令 'rmm' 来自于包 'nmh' (universe)
     命令 'rmm' 来自于包 'mailutils-mh' (universe)
     命令 'mmv' 来自于包 'mmv' (universe)
     命令 'mmd' 来自于包 'mtools' (main)
     命令 'mmg' 来自于包 'mkvtoolnix-gui' (universe)
     命令 'mma' 来自于包 'mma' (universe)
     命令 'mm' 来自于包 'mountmanager' (universe)
     命令 'mm' 来自于包 'multimail' (universe)
    mmm:找不到命令

    后来这样才行
    root@android2012-desktop:~/c210/android-samsung-dev#  .  ./build/envsetup.sh
    including device/htc/passion/vendorsetup.sh
    including device/samsung/smdkc110/vendorsetup.sh
    including device/samsung/smdkv210/vendorsetup.sh
    root@android2012-desktop:~/c210/android-samsung-dev#  mmm ./external/hello
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=2.3.1
    TARGET_PRODUCT=generic
    TARGET_BUILD_VARIANT=eng
    TARGET_SIMULATOR=
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    HOST_ARCH=x86
    HOST_OS=linux
    HOST_BUILD_TYPE=release
    BUILD_ID=GINGERBREAD
    ============================================
    make:进入目录'/home/android2012/c210/android-samsung-dev'
    target thumb C: hello <= external/hello/hello.c
    target Executable: hello (out/target/product/generic/obj/EXECUTABLES/hello_intermediates/LINKED/hello)
    target Non-prelinked: hello (out/target/product/generic/symbols/system/bin/hello)
    target Strip: hello (out/target/product/generic/obj/EXECUTABLES/hello_i

    仔细看luoshengyang 的博客才发现我搞错了一些细节

    第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了。以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为我们准备了另外的命令来支持编译单独的模块,以及重新打包system.img的命令。在继续学习Android源代码之前,就让我们先来看看这个命令吧。

          一. 首先在Android源代码目录下的build目录下,有个脚本文件envsetup.sh,执行这个脚本文件后,就可以获得一些有用的工具:

          USER-NAME@MACHINE-NAME:~/Android$ .  ./build/envsetup.sh

          注意,这是一个source命令,执行之后,就会有一些额外的命令可以使用:

          - croot: Changes directory to the top of the tree.

          - m: Makes from the top of the tree.
          - mm: Builds all of the modules in the current directory.
          - mmm: Builds all of the modules in the supplied directories.
          - cgrep: Greps on all local C/C++ files.
          - jgrep: Greps on all local Java files.
          - resgrep: Greps on all local res/*.xml files.
          - godir: Go to the directory containing a file.
          这些命令的具体用法,可以在命令的后面加-help来查看,这里我们只关注mmm命令,也就是可以用它来编译指定目录的所有模块,通常这个目录只包含一个模块。
          二. 使用mmm命令来编译指定的模块,例如Email应用程序:
          USER-NAME@MACHINE-NAME:~/Android$ mmm packages/apps/Email/
          编译完成之后,就可以在out/target/product/generic/system/app目录下看到Email.apk文件了。Android系统自带的App都放在这具目录下。另外,Android系统的一些可执行文件,例如C编译的可执行文件,放在out/target/product/generic/system/bin目录下,动态链接库文件放在out/target/product/generic/system/lib目录下,out/target/product/generic/system/lib/hw目录存放的是硬件抽象层(HAL)接口文件,后面的文章里面,我们会陆续提及到,敬请关注。
          三. 编译好模块后,还要重新打包一下system.img文件,这样我们把system.img运行在模拟器上时,就可以看到我们的程序了。
          USER-NAME@MACHINE-NAME:~/Android$ make snod
          四. 参照Ubuntu上下载、编译和安装Android最新源代码一文介绍的方法运行模拟器:
          USER-NAME@MACHINE-NAME:~/Android$ emulator
          这样一切就搞定了。
  • 相关阅读:
    五大常用算法
    排序八 基数排序
    动态规划:从新手到专家(一)
    Linux Shell 文本处理工具集锦
    sleep与信号唤醒的问题 & 内核对信号的处理方式 & udelay
    《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)
    《利用python进行数据分析》读书笔记--第八章 绘图和可视化
    《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(三)
    《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(二)
    k8s集群通过nginx-ingress做tcpudp 4层网络转发
  • 原文地址:https://www.cnblogs.com/gooogleman/p/2583020.html
Copyright © 2020-2023  润新知