如何编译anroid控制台程序

1). 下载安装 NDK

下载地址:https://developer.android.google.cn/ndk/downloads?hl=zh-cn
非常非常幸运,国内可以正常访问。

2). makefile模版

HOST_CPU_CORES:=${shell getconf _NPROCESSORS_ONLN}
# MAKEFLAGS:=-s -j${HOST_CPU_CORES} #加-s参数表示 silence,即指令无回显

# NDK_DIR=/mnt/d/downloads/android-ndk-r10e
NDK_DIR=/mnt/d/downloads/android-ndk-r23b
NDK_BIN=$(NDK_DIR)/toolchains/llvm/prebuilt/linux-x86_64/bin
NDK_VER=21
NTV_DIR=$(NDK_DIR)/sources/android/native_app_glue
SRC_DIR=.
TMP_DIR=$(SRC_DIR)/tmp
TMP_APK=tmp.apk
SGN_APK=sgn.apk
OUT_APK=out.apk
KEYPAIR=myKeyPair.keystore
LIBARCH=arm64-v8a
CPLARCH=aarch64-linux-android


BIN      =ndkvmsetup
INCS     = -I"./"
LIBS     =
# -g3 to generate debug msg
CFLAGS   = 
XFLAGS   =
LDFLAGS  =

PLATFORM?=android
CSOURCES+= main.c



# 隐藏函数名
CFLAGS	+=  -fvisibility=hidden
XFLAGS	+=  -fvisibility=hidden


CCSELECT:=__GCC__



ifeq ($(CCSELECT),__GCC__)
    GCC_DIR  =/usr
    CC       = $(NDK_BIN)/clang
    XX       = $(NDK_BIN)/clang++
    TR       = $(NDK_BIN)/llvm-strip
    LIBS    +=
    INCS    += -I$(NTV_DIR)/
    CFLAGS	+=  -D__DEBUG__ -D${CCSELECT} -DANDROID_BUILD
    CFLAGS	+=  -target aarch64-none-linux-android$(NDK_VER)
    CFLAGS  +=  --sysroot $(NDK_DIR)/toolchains/llvm/prebuilt/linux-x86_64/sysroot
    # CFLAGS  +=  -I$(NDK_DIR)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/
    CFLAGS  +=  -fdata-sections -ffunction-sections -fstack-protector-strong -funwind-tables -no-canonical-prefixes -Wno-invalid-command-line-argument 
    CFLAGS  +=  -Wno-unused-command-line-argument  -D_FORTIFY_SOURCE=2 -fpic -O2 -Wformat -Werror=format-security -Wno-zero-length-array
    CFLAGS  +=  -pedantic -fPIC -Wall -Wno-format-pedantic -Wno-unused-variable -Wno-gnu-binary-literal -Wno-return-type -Wno-int-to-pointer-cast -Wno-parentheses
    CFLAGS  +=  -std=gnu11 
    CFLAGS  +=  -DANDROID

    XFLAGS  +=  -D__DEBUG__ -D${CCSELECT} -DANDROID_BUILD
    XFLAGS  +=  -target aarch64-none-linux-android$(NDK_VER) -fdata-sections -ffunction-sections -fstack-protector-strong 
    XFLAGS  +=  -funwind-tables -no-canonical-prefixes  
    XFLAGS  +=  --sysroot $(NDK_DIR)/toolchains/llvm/prebuilt/linux-x86_64/sysroot 
    XFLAGS  +=  -Wno-invalid-command-line-argument -Wno-unused-command-line-argument  
    XFLAGS  +=  -D_FORTIFY_SOURCE=2 -fno-exceptions -fno-rtti -fpic -O2 -DNDEBUG  
    # XFLAGS  +=  -I$(NDK_DIR)/sources/android/native_app_glue -Ijni    
    XFLAGS  +=  -DANDROID  -Wformat -Werror=format-security   


    LDFLAGS +=  -Wl,-soname,$(BIN) # -shared 
    LDFLAGS +=  -latomic -target aarch64-none-linux-android$(NDK_VER) -no-canonical-prefixes   
    LDFLAGS +=  -Wl,--build-id=sha1 -Wl,--no-rosegment  -u ANativeActivity_onCreate -stdlib=libstdc++ -Wl,--no-undefined -Wl,
    LDFLAGS +=  -latomic -llog -landroid -lc -lm #-lEGL -lGLESv1_CM 

    # LDFLAGS +=  -shared -llog -landroid -lEGL -lGLESv2
endif


LDFLAGS+= # -g3
OBJEXT ?= .o
AOBJS   = $(ASOURCES:.S=$(OBJEXT))
# COBJS   = $(CSOURCES:.c=$(OBJEXT))
COBJS_  = $(filter %.c,$(CSOURCES))
COBJS   = $(COBJS_:.c=$(OBJEXT))
XOBJS_  = $(filter %.cpp,$(CSOURCES))
XOBJS   = $(XOBJS_:.cpp=$(OBJEXT))
# XOBJS   = $(CSOURCES:.cpp=$(OBJEXT))
OBJS    = $(AOBJS) $(COBJS) $(XOBJS)


all: default

%.o: %.c
    @echo CC	$<
    "$(CC)" -c $< -o $@ $(CFLAGS) $(INCS)

%.o: %.cpp
    @echo XX	$<
    "$(XX)" -c $< -o $@ $(XFLAGS) $(INCS)


c: $(OBJS)
    echo -e '\e[1;36m  linking...\e[0m'
    "$(XX)" -o $(BIN) $(OBJS) $(LDFLAGS) $(LIBS)

    echo -e '\e[1;36m  stripping...\e[0m'
    "$(TR)" --strip-unneeded --remove-section=.symtab $(BIN)
    "$(TR)" $(BIN)

    @echo 体积:
    @ls -al $(BIN)


default:c
    #do nothing

clean: 
    rm -rf *.png
    clear
    rm -f $(BIN) $(OBJS)
    $(clean2)
                    

转载请注明本网页链接!