zoukankan      html  css  js  c++  java
  • 坑爹,终于编译出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
          这样一切就搞定了。
  • 相关阅读:
    IO 单个文件的多线程拷贝
    day30 进程 同步 异步 阻塞 非阻塞 并发 并行 创建进程 守护进程 僵尸进程与孤儿进程 互斥锁
    day31 进程间通讯,线程
    d29天 上传电影练习 UDP使用 ScketServer模块
    d28 scoket套接字 struct模块
    d27网络编程
    d24 反射,元类
    d23 多态,oop中常用的内置函数 类中常用内置函数
    d22 封装 property装饰器 接口 抽象类 鸭子类型
    d21天 继承
  • 原文地址:https://www.cnblogs.com/gooogleman/p/2583020.html
Copyright © 2011-2022 走看看