yealink学习笔记20200319

Android.mk

生成可执行文件:

- APK程序:一般的Android程序,编译打包生成apk文件。
- JAVA库:java类库,编译打包生成jar包文件。
- CC++应用程序:可执行的C/C++应用程序。
- CC++静态库:编译生产C/C++静态库,并打包成.a文件。
- CC++共享库:编译生成共享库,并打包成.so文件,有且只有共享库才能被安装/复制到APK包中。


LOCAL_PATH := $(call my-dir)          //定义当前模块的相对路径     

include $(CLEAR_VARS)               //清除当前的环境变量

LOCAL_MODULE := test              //编译生成的目标名

LOCAL_SRC_FILES := test.c            //编译该模块需要的源文件

LOCAL_MODULE_PATH += $(LOCAL_PATH) //生成文件的位置

include $(BUILD_EXECUTABLE)       //编译生成的文件格式


其中“my-dir”是由编译系统提供的宏函数,用于返回当前Android.mk所在的路径。

扫描二维码关注公众号,回复: 10217766 查看本文章

Android可执行文件一般存放在data/local    //最好最简单的地方

1.编译应用程序的模板:
     #Test Exe
     LOCAL_PATH := $(call my-dir)
     #include $(CLEAR_VARS)
     LOCAL_SRC_FILES:= main.c
     LOCAL_MODULE:= test_exe
     #LOCAL_C_INCLUDES :=
     #LOCAL_STATIC_LIBRARIES :=
     #LOCAL_SHARED_LIBRARIES :=
     include $(BUILD_EXECUTABLE)

生成文件夹路径sdm660\out\target\product\sdm660_64\system\bin

BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。补充说明:include $(BUILD_PACKAGE)则是编译出一个apk,include $(BUILD_STATIC_JAVA_LIBRARY)则是编译出jar包

(菜鸟级别解释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。

- LOCAL_PATH:这个变量用于给出当前文件的路径,必须在Android.mk的开头定义,可以这样使用LOCAL_PATH := $(call my-dir),这样这个变量不会被$(CLEAR_VARS)清除,因为每个Android.mk只需要定义一次(即使一个文件中定义了多个模块的情况下)。
- LOCAL_SRC_FILES:当前模块包含的所有源代码文件。
- LOCAL_MODULE:当前模块的名称,这个名称应当是唯一的,并且不能包含空格。模块间的依赖关系就是通过这个名称来引用的。
- LOCAL_MODULE_CLASS:标识所编译模块最后放置的位置。ETC表示放置在/system/etc.目录下,APPS表示放置在/system/app目录下,SHARED_LIBRARIES表示放置在/system/lib目录下。如果具体指定,则编译的模块不会放到编译系统中,最后会在out对应product的obj目录下的对应目录中。
- LOCAL_SRC_FILES:这是要编译的源代码文件列表。只要列出要传递给编译器的文件即可,编译系统会自动计算依赖关系。源代码文件路径都是相相对于LOCAL_PATH的,因此可以使用相对路径进行描述。
- LOCAL_JAVA_LIBRARIES:当前模块依赖的Java共享库,也叫Java动态库。例如framework.jar包。
- LOCAL_STATIC_JAVA_LIBRARIES:当前模块依赖的Java静态库,在Android里,导入的jar包和引用的第三方工程都属于Java静态库。
- LOCAL_STATIC_LIBRARIES:当前模块在运行时依赖的静态库的名称。
- LOCAL_SHARED_LIBRARIES:当前模块在运行时依赖的动态库的名称。
- LOCAL_C_INCLUDES:c或c++语言需要的头文件的路径。
- LOCAL_CFLAGS:提供给C/C++编译器的额外编译参数。
- LOCAL_PACKAGE_NAME:当前APK应用的名称。
- LOCAL_CERTIFICATE:签署当前应用的证书名称。
- LOCAL_MODULE_TAGS:当前模块所包含的标签,一个模块可以包含多个标签。标签的值可能是eng、user、debug、development、optional。其中,optional是默认标签。
- LOCAL_DEX_PREOPT:apk的odex优化开关,默认是false。

2.编译静态库的模板:
     #Test Static Lib
     LOCAL_PATH := $(call my-dir)
     include $(CLEAR_VARS)
     LOCAL_SRC_FILES:= /
               helloworld.c
     LOCAL_MODULE:= libtest_static
     #LOCAL_C_INCLUDES :=
     #LOCAL_STATIC_LIBRARIES :=
     #LOCAL_SHARED_LIBRARIES :=
     include $(BUILD_STATIC_LIBRARY)

生成文件夹路径为out/target/product/sdm660_64/obj/STATIC_LIBRARIES/helloworld_intermediates/

一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库.

3.编译动态库的模板:
     #Test Shared Lib
     LOCAL_PATH := $(call my-dir)
     include $(CLEAR_VARS)
     LOCAL_SRC_FILES:= /
               helloworld.c
     LOCAL_MODULE:= libtest_shared
     TARGET_PRELINK_MODULES := false
     #LOCAL_C_INCLUDES :=
     #LOCAL_STATIC_LIBRARIES :=
     #LOCAL_SHARED_LIBRARIES :=     

     include $(BUILD_SHARED_LIBRARY)

生成文件夹的路径out/target/product/sdm660_64/obj/SHARED_LIBRARIES/helloworld_intermediates/helloworld.so.toc

一般的和上面相似,BUILD_SHARED_LIBRARY表示编译一个动态库。

另外,在Android.mk文件中,还可以指定最后的目标安装路径,
用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:

TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。
用法如:
 CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

- TARGET_ROOT_OUT:表示根文件系统out/target/product/xxxxx/root。
- TARGET_OUT:表示system文件系统out/target/product/xxxx/system。
- TARGET_OUT_DATA:表示data文件系统out/target/product/xxxx/data。
- TARGET_OUT_SHARED_LIBRARIES:表示out/target/product/xxxx/system/lib
- TARGET_OUT_APPS:表示out/target/product/xxxx/system/app
- ANDROID_PRODUCT_OUT:out/target/product/xxxx/
- TARGET_OUT_JAVA_LIBRARIES:out/target/product/xxxx/system/framework

在编译核心时,常常要反复输入一长串命令,如

  • make mrproper
  • make menuconfig
  • make dep
  • make clean
  • make bzImage
  • .......

这些命令既长,又繁琐。而且有时候容易输错,浪费你的时间和精力。如果把这些命令做成一个文件,让它自动按顺序执行,对于需要多次反复编译核心的用户来说,会很方便。

用source命令可以办到这一点。它的作用就是把一个文件的内容当成是shell来执行。

先在/usr/src/linux-2.4.20目录下建立一个文件,取名为make_command,在其中输入如下内容:

  • make mrproper &&
  • make menuconfig &&
  • make dep &&
  • make clean &&
  • make bzImage &&
  • make modules &&
  • make modules_install &&
  • cp arch/i386/boot/bzImge /boot/vmlinuz_new &&
  • cp System.map /boot &&
  • vi /etc/lilo.conf &&
  • lilo -v

文件建立好之后,以后每次编译核心,只需要在/usr/src/linux-2.4.20下输入source make_command 就行了。这个文件也完全可以做成脚本,只需稍加改动即可。如果你用的不是lilo来引导系统,可以把最后两行去掉,配置自己的引导程序来引导内核。

shell编程中的命令有时和C语言是一样的。&&表示与,||表示或。把两个命令用&&联接起来,如 make mrproper && make menuconfig,表示要第一个命令执行成功才能执行第二个命令。对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行。

1、source  build/envsetup.sh

2、lunch,选择45. sdm660_64-userdebug

3、make –j32  选择make 的进程32代表32个进程一起执行

 


文件权限修改

chmod    777    文件名

 R       W       X

 4        2        2

-RWX RWX RWX  文件 个人   组    其他

dRWX RWX RWX  目录 个人   组    其他


发布了10 篇原创文章 · 获赞 0 · 访问量 224

猜你喜欢

转载自blog.csdn.net/qq_37554547/article/details/104967871