• 在NDK上建立自己的项目


    建立Android.mk文件

    ~/android-ndk/apps/project_test/project/jni $gvim Android.mk


    #### Android.mk #####
    # 进入当前目录并取得当前目录的路径
    # 其结果为: ~/
    android-ndk/apps/project_test/project/jni

    LOCAL_PATH:= $(call my-dir)

    # 清除全局变量
    include $(CLEAR_VARS)

    # 项目需要编译源文件列表
    LOCAL_SRC_FILES:= \
    main.cpp

    # 项目需要的.h头文件目录列表
    LOCAL_CFLAGS := 

    # 项目需要的链接自编译出的.so 文件列表
    LOCAL_SHARED_LIBRARIES :=

    # 项目需要的链接非自编译出的.so 文件目录及列表
    LOCAL_LDLIBS :=

    # 在执行此Android.mk 文件时,显示指定的变量信息
    # 此次则显示 LOCAL_SRC_FILE变量内容在控制台上
    $(info $(LOCAL_SRC_FILES))

    # 项目编译出输文件名
    LOCAL_MODULE:= main

    # 项目编译出输文件名,编译成哪种文件,
    # BUILD_EXECUTABLE 是指.bin二进制执行文件
    # BUILD_SHARED_LIBRARY 是指.so 动态库文件
    # BUILD_STATIC_LIBRARY 是指.a 静态库文件
    # 这里我们是生成二进制执行文件
    include $(BUILD_EXECUTABLE)


    3) 在java源码项目目录,
    android-ndk/apps/project_test/project/src


    创建文件 default.properties
    android-ndk/apps/project_test/project $gvim default.properties
    #### default.properties ####
    target=android-4

    创建文件Application.mk
    android-ndk/apps/project_test/ $gvim Application.mk
    #### Application.mk ####
    APP_PROJECT_PATH := $(call my-dir)
    APP_MODULES := main

    4)编译project_test项目

    ~/android-ndk $make APP=project_test

    5)输出查看
    在apps/project_test/project/libs 目录里会有生成的 main.bin 文件


    2.安装到android SDK中测试。
    启动emulator模拟器
     $./emulator

    修改system目录的属性为可读写
     $./adb remount

    push到指定的目录
     $./adb push /out/system-bin/main.bin  /system/bin

    运行:
     $./adb shell
    # chmod 777 /system/bin/main.bin
    # /system/bin/main.bin

    便可看到输出结果:test project OK!

    -------------------------------------------------------------------

    在原有的project_test 项目中添加 SO 子项目

    之前的 project_test 项目 请看<在NDK上建立第一个自己的项目>文档,在此主要描述如何增加自己的 SO项目。
    1. 建立自己SO的子项目。
    1) 先在项目project_test目录中新建子项目目录,如: libtest 目录
    ~/android-ndk/apps/project_test/project/jni $mkdir libtest

    2) 进入项目目录新建C++ lib源码文件,如: libtest.cpp
    ~/
    android-ndk/apps/project_test/project/jni $cd libtest
    ~/
    android-ndk/apps/project_test/project/jni/libtest $gvim libtest.cpp
    /*--- libtest.cpp ---*/
    // libtest.cpp
    #include <stdio.h>

    void printlibtest()
    {
    printf("libtest project OK!\n");
    }

    3) 建立头文件如: libtest.h
    ~/
    android-ndk/apps/project_test/project/jni/libtest $gvim libtest.h
    /*--- libtest.h ---*/
    // libtest.h
    #ifndef GUILH_LIB_TEST_H 
    #define GUILH_LIB_TEST_H

    void printlibtest();

    #endif

    建立
    android-ndk/apps/project_test/project/jni/libtest/Android.mk文件
    ~/
    android-ndk/apps/project_test/project/jni/libtest $gvim Android.mk
    ### 
    android-ndk/apps/project_test/project/jni/libtest/Android.mk ###
    # 进入当前目录并取得当前目录的路径
    LOCAL_PATH:= $(call my-dir)

    # 清除NDK全局变量
    include $(CLEAR_VARS)

    # 项目需要编译源文件列表
    LOCAL_SRC_FILES:= \
    libtest.cpp

    # 项目需要的.h头文件目录列表
    LOCAL_CFLAGS :=

    # 项目需要的链接自编译出的.so 文件列表
    LOCAL_SHARED_LIBRARIES :=

    # 项目需要的链接非自编译出的.so 文件目录及列表
    LOCAL_LDLIBS :=

    # 在执行此Android.mk 文件时,显示指定的变量信息, 如无需显示则可在之前加“#”符号
    # 此次则显示 LOCAL_SRC_FILE变量内容在控制台上
    $(info $(LOCAL_SRC_FILES))

    # 项目编译出输文件名
    LOCAL_MODULE:= libtest

    # 项目编译出输文件名,编译成哪种文件,
    # BUILD_EXECUTABLE 是指.bin二进制执行文件
    # BUILD_SHARED_LIBRARY 是指.so 动态库文件
    # BUILD_STATIC_LIBRARY 是指.a 静态库文件
    # 这里我们是生成动态库文件
    include $( BUILD_SHARED_LIBRARY)

    2. 修改原project_test 项目与 SO子项目进行连接
    1) 进入test子项目目录修改C++源码文件,如: main.cpp
    ~/
    android-ndk/apps/project_test/project/jni $cd ../test

    ~/android-ndk/apps/project_test/project/jni/test $gvim main.cpp
    /*--- main.cpp ---*/
    // main.cpp
    #include <lib/libtest.h>
    int main()
    {
    printlibtest();
    return 0;
    }

    2) 修改sources/project_test/test/Android.mk文件
    ~/
    android-ndk/apps/project_test/project/jni/test $gvim Android.mk
    ### sources/project_test/test/Android.mk ###
    # 进入当前目录并取得当前目录的路径
    LOCAL_PATH:= $(call my-dir)

    # 清除NDK全局变量
    include $(CLEAR_VARS)

    # 项目需要编译源文件列表
    LOCAL_SRC_FILES:= \
    main.cpp

    # 项目需要的.h头文件目录列表
    LOCAL_CFLAGS := \
    -I$(LOCAL_PROJECT_PATH)

    # 项目需要的链接自编译出的.so 文件列表
    LOCAL_SHARED_LIBRARIES := \
    libtset

    # 项目需要的链接非自编译出的.so 文件目录及列表
    LOCAL_LDLIBS :=

    # 在执行此Android.mk 文件时,显示指定的变量信息, 如无需显示则可在之前加“#”符号
    # 此次则显示 LOCAL_SRC_FILE变量内容在控制台上
    $(info $(LOCAL_SRC_FILES))

    # 项目编译出输文件名
    LOCAL_MODULE:= main

    # 项目编译出输文件名,编译成哪种文件,
    # BUILD_EXECUTABLE 是指.bin二进制执行文件
    # BUILD_SHARED_LIBRARY 是指.so 动态库文件
    # BUILD_STATIC_LIBRARY 是指.a 静态库文件
    # 这里我们是生成动态库文件
    include $( BUILD_EXECUTABLE)



    3) 修改文件apps/project_test/Application.mk
     $gvim Application.mk
    ### apps/project_test/Application.mk ###
    APP_PROJECT_PATH := $(call my-dir)
    APP_MODULES := gmain.bin libtest


    3. 编译project_test项目
    ~/android-ndk $make APP=project_test

    输出查看
    在~/
    android-ndk/apps/project_test/project/libs 目录里会有生成的main.bin与libtest.so文件

    4. 安装到android SDK中测试。
    启动emulator模拟器
    $./emulator

    修改system目录的属性为可读写
     $./adb remount

    push到指定的目录
     $./adb push /out/system-bin/gmain.bin  /system/bin
     $./adb push /out/system-lib/libtest.so  /system/lib

    运行:
     $./adb shell
    # chmod 777 /system/bin/main.bin
    # /system/bin/main.bin

    便可看到输出结果:libtest project OK!

  • 相关阅读:
    宋体freetype16和12号字无法正常显示
    Visual Studio 2015 自动生成 的大文件xxx.vc.db的删除问题
    PP助手上传失效
    freetype教程网址
    编译器发展
    静态与动态库文件
    makefile文件操作大全
    Unicode编码字符范围和具体文字
    Oracle用户被锁定解决方法
    oracle中rownum和row_number()
  • 原文地址:https://www.cnblogs.com/sardine/p/2121845.html
Copyright © 2020-2023  润新知