zoukankan      html  css  js  c++  java
  • Android NDK使用

    1. 介绍

    这里主要想记录一下Android NDK开发C程序的使用方法

    2. ndk下载

    google官网或者国内镜像网站下载android-ndk
    形如:  android-ndk-r<version>-<os-type>-<arch>.zip

    笔者使用的是CentOS 7 x86-64, 下载的是android-ndk-r17b-linux-x86_64.zip

    关于不同到底该使用哪个版本的NDK, 从网上获取的信息来看
    使用哪个版本都没问题 新版本的NDK应该是向下兼容的 同时倾向于编译64位

    当我们开发ndk应用时, 有两种方式

     - 使用独立工具链, 仅依赖Linux
     - 使用ndk工具, 依赖Android

    2. 独立工具链

    有两种方式可以生成独立toolchain

    首先将android-ndk-r17b-linux-x86_64.zip 解压

    2.1 make-standalone-toolchain.sh

    # ./build/tools/make-standalone-toolchain.sh --platform=android-23 --package-dir=/opt --toolchain=arm-linux-androideabi-4.9
    WARNING: make-standalone-toolchain.sh will be removed in r13. Please try make_standalone_toolchain.py now to make sure it works for your needs.
    HOST_OS=linux
    HOST_EXE=
    HOST_ARCH=x86_64
    HOST_TAG=linux-x86_64
    HOST_NUM_CPUS=4
    BUILD_NUM_CPUS=8
    Auto-config: --arch=arm
    Copying prebuilt binaries...
    Copying sysroot headers and libraries...
    Copying c++ runtime headers and libraries...
    Creating package file: /opt/arm-linux-androideabi-4.9.tar.bz2
    Cleaning up...
    Done.

    可以看到生成的工具链位于/opt/arm-linux-androideabi-4.9.tar.bz2
    参数说明如下:

    --platform:    Android API版本(android-23 <=> Android 6.0)
    --toolchain:   工具链类型,可在toolchains中查看支持的类型
    --package-dir: 工具链的存放路径

    2.2 make_standalone_toolchain.py

    # ./build/tools/make_standalone_toolchain.py --arch arm --api 23  --package-dir /opt

    没有任何提示, 在/opt目录下生成了arm-linux-androideabi.tar.bz2
    参数说明如下:

    --arch:        arm,arm64,mips,mips64,x86,x86_64
    --api:         API version
    --package-dir: Package location

    其中需要说明的是arch, 通常手机都是arm, 但是是32位还是64位则需要判断一下
    参考<关于如何区分Android手机是32位还是64位>

    3. ndk构建脚本

    ndk提供了比较高级的构建脚本来实现ndk的开发

    3.1 配置

    在<project>目录下创建Android.mk和Application.mk;  假定源代码为test.c

    Android.mk内容如下

    LOCAL_PATH:= $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := testproj
    
    LOCAL_SRC_FILES := 
        test.c
    
    LOCAL_CFLAGS += -Wno-unused-parameter -Wno-pointer-arith 
                    -Wno-missing-field-initializers
    
    include $(BUILD_EXECUTABLE)

    Application.mk内容如下

    APP_ABI := x86_64
    APP_BUILD_SCRIPT := /home/user/proj/Android.mk

    3.2 编译

    使用如下命令即可进行编译

    $ export NDK=<ndk>
    $ $NDK/ndk-build NDK_PROJECT_PATH=<project> NDK_APPLICATION_MK=<project>/Application.mk
    $ $NDK/ndk-build NDK_PROJECT_PATH=<project> clean NDK_APPLICATION_MK=<project>/Application.mk

    参考:
    <NDK入门指南>
    <Android.mk语法>
    <理解Android Build系统>

  • 相关阅读:
    Dockerfile简介及基于centos7的jdk镜像制作
    docker数据卷(Data Volumes)
    docker入门及常用命令
    Failed to start bean ‘org.springframework.kafka.config.internalKafkaListenerEndpointRegistry
    dubbo服务启动报:qos-server can not bind localhost:22222s
    Dubbo服务调用Failed to invoke the method错误记录
    java8-list转Map
    git remote: HTTP Basic: Access denied 错误解决办法
    SSH整合(二)
    SSH整合
  • 原文地址:https://www.cnblogs.com/hzl6255/p/6088678.html
Copyright © 2011-2022 走看看