• ndkbuild 记录


    概述:虽然ndk编译看起来原理简单,不过落实的时候遇到了各种问题,这里记录以下:

    1. 下载和解压

    cd /opt
    mkdir android-ndk
    sudo wget https://dl.google.com/android/repository/android-ndk-r23b-linux.zip
    sudo unzip android-ndk-r23b-linux.zip


    2.设置环境变量

    ln -s android-ndk-r23b ndk

    在/etc/bash.bashrc后面追加:

    # NDK
    export NDK_HOME=/home/peng/Desktop/eclipse_ndk/ndk
    export PATH=$NDK_HOME:$PATH
    echo "PATH is:$PATH.\n"

    然后重新启动termianl,让PATH生效。

    3. 编写ndk sample
    目录结构如下:

    peng@peng-Vbox:~/Desktop/eclipse-workspace$ tree
    .
    ├── Application.mk
    └── hello-jni
        ├── java
        │   └── com
        │       └── example
        │           └── hellojni
        │               └── HelloJni.kt
        └── jni(必须为jni,不然ndk-build不识别)
            ├── Android.mk
            └── hello-jni.c

    Application.mk:

    export NDK_PROJECT_PATH=/home/peng/Desktop/eclipse-workspace/hello-jni
    APP_PROJECT_PATH := $(NDK_PROJECT_PATH)
    APP_ABI := all

    Android.mk:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := hello-jni
    LOCAL_SRC_FILES := hello-jni.c
    include $(BUILD_SHARED_LIBRARY)

    hello-jni.c:

    /*
     * Copyright (C) 2016 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     *
     */
    #include <string.h>
    #include <jni.h>
    
    /* This is a trivial JNI example where we use a native method
     * to return a new VM String. See the corresponding Java source
     * file located at:
     *
     *   hello-jni/app/src/main/java/com/example/hellojni/HelloJni.java
     */
    JNIEXPORT jstring JNICALL
    Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
    {
    #if defined(__arm__)
        #if defined(__ARM_ARCH_7A__)
        #if defined(__ARM_NEON__)
          #if defined(__ARM_PCS_VFP)
            #define ABI "armeabi-v7a/NEON (hard-float)"
          #else
            #define ABI "armeabi-v7a/NEON"
          #endif
        #else
          #if defined(__ARM_PCS_VFP)
            #define ABI "armeabi-v7a (hard-float)"
          #else
            #define ABI "armeabi-v7a"
          #endif
        #endif
      #else
       #define ABI "armeabi"
      #endif
    #elif defined(__i386__)
    #define ABI "x86"
    #elif defined(__x86_64__)
    #define ABI "x86_64"
    #elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */
    #define ABI "mips64"
    #elif defined(__mips__)
    #define ABI "mips"
    #elif defined(__aarch64__)
    #define ABI "arm64-v8a"
    #else
    #define ABI "unknown"
    #endif
    
        return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");
    }

    4. ndk-build

    export NDK_PROJECT_PATH=/home/peng/Desktop/eclipse-workspace/hello-jni

    cd /home/peng/Desktop/eclipse-workspace/hello-jni
    ndk-build NDK_LOG=1

    编译成功。




  • 相关阅读:
    记住我
    国米夺冠
    小谈“汉字转换成拼音(不带声调)”
    NLP资源共享盛宴
    文本分类资源和程序开源共享
    菜鸟进阶:C++实现Chisquare 特征词选择算法
    欢迎大家试用信息领域学科知识服务平台
    欢迎大家加入NLP,WEBIR,DATA Ming 的技术QQ群
    求两点之间所有路径的算法
    step by step 文本分类(一)
  • 原文地址:https://www.cnblogs.com/hkingsp/p/15788407.html
Copyright © 2020-2023  润新知