Android NDK

  1. NDK
    1. Make构建
    2. CMake构建
  2. Android tools
    1. Process memory layout
  3. AOSP

NDK

Make构建

Android.mk
Android.mk语法

  • LOCAL_PATH := $(call my-dir):当前目录
  • include $(CLEAR_VARS):清理LOCAL_XXX目录
  • LOCAL_MODULE := xxx:定义模块名称
  • include $(BUILD_SHARED_LIBRARY):生成so库
  • include $(BUILD_STATIC_LIBRARY):生成a库
  • include $(BUILD_EXECUTABLE):生成bin文件

编译命令:

ndk-build \
  NDK_PROJECT_PATH=. NDK_OUT=./out/obj NDK_LIBS_OUT=./out/libs \
  APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk

CMake构建

示例ndk.zip (直接右键另存为下载)

Android tools

# 查看APK版本
cd E:\Android\SDK\build-tools\25.0.3
aapt dump badging app.apk

# 属性设置
getprop | grep log
setprop persist.sys.logd.level V

# 查看软件信息
dumpsys package com.xxx.xxx | grep Path

Process memory layout

  • ps, top: 查看内存基本信息
  • procrank, cat /proc/pid/status: 查看内存详细信息

Vss: 虚拟内存
Rss: 实际使用内存,包括共享库内存
Pss: 实际使用内存,共享内存按比例分配计算
Uss: 进程独占内存

  • pmap, cat /proc/pid/maps: 查看内存映射

AOSP

主要步骤参考ArchWiki的AOSP构建,其它的关键步步骤如下:

# 打开pacman的lib32选项
sudo vim /etc/pacman.conf  #找到[multilib],把这一行和它下一行的注释去掉
sudo pacman -Syy

# 自己遇到的一个问题,makd时需要,不然报错
sudo pacman -S lib32-glibc

# 安装repo
sudo pacman -S repo

# 使用Python2环境
virtualenv -p /usr/bin/python2 venv
source venv/bin/activate

# 下载源码,这里使用清华的源
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r81 --depth 1
repo sync -j4 -c

# 配置openjdk
sudo ln -s /usr/lib/jvm/java-7-openjdk /usr/lib/jvm/java-7-openjdk-amd64
sudo ln -s /usr/lib/jvm/java-7-jdk /usr/lib/jvm/default-runtime
sudo ln -s /usr/lib/jvm/java-7-jdk /usr/lib/jvm/default

# 防止AOSP自带gcc/ld的BUG,用系统的代替
cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld

# 在bash环境下执行以下命令
export LC_ALL=C         # 去除本地变量,防止影响编译
source build/envsetup.sh
lunch
make -j4

# 运行模拟器
source build/envsetup.sh
lunch   # 选择刚才设置的目标版本
emulator

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [ yehuohan@gmail.com ]

文章标题:Android NDK

本文作者:Y

发布时间:2020-07-16, 13:41:18

最后更新:2021-07-07, 23:27:39

原始链接:http://yehuohan.github.io/2020/07/16/%E6%9D%82%E8%AE%B0/0Usage/android-ndk/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。