精华内容
下载资源
问答
  • linux安卓NDK配置

    2014-03-04 21:29:41
    linux换下配置安卓开发环境的教程,可以下载学习!
  • NDK安卓编译链安装

    2020-11-02 11:08:32
    NDK安卓编译链安装 网址:https://developer.android.com/ndk/downloads 选择Linux平台的,文档截止最新版本android-ndk-r19c-linux-x86_64.zip 放置到centos主机上 安装 mkdir -p /opt/android*tools/unzip -x ...

    NDK安卓编译链安装

    网址:https://developer.android.com/ndk/downloads
    选择Linux平台的,文档截止最新版本android-ndk-r19c-linux-x86_64.zip
    放置到centos主机上

    安装

    mkdir -p /opt/android*tools/unzip -x android-ndk-r19c-linux-x86*64.zip -d /opt/android_tools/
    

    在.bashrc添加以下语句

    NDK=/opt/android*tools/android-ndk-r19cPATH=${PATH}:${NDK}/toolchains/llvm/prebuilt/linux-x86*64/bin
    

    source .bashrc

    编译使用
    64位:aarch64-linux-android28-clang main.c
    32位:armv7a-linux-androideabi22-clang main.c

    展开全文
  • Linux NDK的安装

    千次阅读 2018-07-19 15:39:20
    如果我们需要在安卓平台使用ffmpeg,或者其他一些c语言的库,我们需要使用NDK来编译源代码为共享库文件(.so) 1、下载NDK google官方下载:https://developer.android.com/ndk/downloads/ 下载后复制到Linux下...

    如果我们需要在安卓平台使用ffmpeg,或者其他一些c语言的库,我们需要使用NDK来编译源代码为共享库文件(.so)

    1、下载NDK

    google官方下载:https://developer.android.com/ndk/downloads/

    下载后复制到Linux下的目录下,直接unzip android-ndk-r17b-linux-x86_64.zip来解压。

    2、设置系统环境变量

    Linux命令行下输入vi /etc/profile

    在文件末尾添加如下内容:

    #android NDK
    export ANDROID_NDK="/home/fanx/ANDROID_NDK/android-ndk-r17b"
    export PATH="$ANDROID_NDK:$PATH"

    保存退出

    然后命令行下输入source /etc/profile来更新下系统环境变量,就成功安装了NDK啦。

    展开全文
  • NDK开发汇总一 Linux环境生成so文件1 ...}~2 编译参考: NDK16_Linux中使用NDK编译安卓可用的.c配置gcc临时环境变量export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/a...

    NDK开发汇总

    一 Linux环境生成so文件

    1 新建源文件

    vim main.c

    内容

    int test(){

    return 11;

    }

    ~

    2 编译

    参考: NDK16_Linux中使用NDK编译安卓可用的.c

    配置gcc临时环境变量

    export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

    配置头文件临时环境变量

    export AAA="--sysroot=/home/bao/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/bao/android-ndk-r17c/sysroot/usr/include -isystem /home/bao/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"

    生成so

    $CC $AAA -fPIC -shared main.c -o libTest.so

    -shared 生成动态库

    -static 生成静态库

    查看so中方法:

    (so拷贝到aarch64-linux-android-nm同路径下)

    /home/bao/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-nm libTest.so

    1465a67eda1063ce76b07bf372862dfe.png

    二 CMAKE集成

    AS新建一个新的Android项目include C++ support

    Project视图下,项目main文件夹下创建文件路径

    jniLibs/armeabi-v7a

    将Linux环境生成的libTest.so添加到上述目录

    e7c5e7a5a36f7d479ddf852748706462.png

    项目自带的native-lib.cpp中调用libTest.so中方法

    注意:extern “C”,引入了android/log.h打印调用结果

    #include

    #include

    #include

    extern "C" {

    extern int test();

    };

    extern "C" JNIEXPORT jstring

    JNICALL

    Java_com_example_ray_ndk16_MainActivity_stringFromJNI(

    JNIEnv *env,

    jobject /* this */) {

    std::string hello = "Hello from C++";

    __android_log_print(ANDROID_LOG_ERROR,"jni","libTest.so 里面的test方法:%d",test());

    return env->NewStringUTF(hello.c_str());

    }

    配置CMakeLists.txt

    指定so库路径

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} L${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a")

    链接库

    target_link_libraries 添加Test,省略lib和.so (libTest.so →Test)

    # 设置一个变量

    # CMAKE_CXX_FLAGS C++的参数 会传给编译器

    # CMAKE_C_FLAGS C的参数 会传给编译器

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a")

    # Specifies libraries CMake should link to your target library. You

    # can link multiple libraries, such as libraries you define in this

    # build script, prebuilt third-party libraries, or system libraries.

    target_link_libraries( # Specifies the target library.

    native-lib

    Test

    # Links the target library to the log library

    # included in the NDK.

    ${log-lib} )

    也可以这样配置

    add_library(Test SHARED IMPORTED)

    set_target_properties(Test PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi-v7a/libTest.so)

    配置build.gradle 设置支持手机平台: abiFilters “armeabi-v7a”

    defaultConfig {

    applicationId "com.example.ray.ndk16"

    minSdkVersion 17

    targetSdkVersion 29

    versionCode 1

    versionName "1.0"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    externalNativeBuild {

    cmake {

    cppFlags "-frtti -fexceptions"

    abiFilters "armeabi-v7a"

    }

    }

    }

    java中加载库:System.loadLibrary(“Test”);

    public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.

    static {

    System.loadLibrary("native-lib");

    System.loadLibrary("Test");

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // Example of a call to a native method

    TextView tv = (TextView) findViewById(R.id.sample_text);

    tv.setText(stringFromJNI());

    }

    /**

    * A native method that is implemented by the 'native-lib' native library,

    * which is packaged with this application.

    */

    public native String stringFromJNI();

    }

    运行结果

    5e49b2b4f7382b5bce8cc0bf0b9fba3c.png

    展开全文
  • 想要在ubuntu中编译出在Android手机中可以执行的文件,需要下载NDK中对应的交叉编译工具 二 ubuntu配置NDK 1 下载 wget 找到ndk的官网下载地址,注意选Linux平台 wget ndk的url地址 2 配置临时环境变量 export CC=...

    NDK开发汇总

    一 ubuntu中编译c文件

    • vim main.c
      编辑
    int main(){
    	printf("111\n");
    	return 0;
    }
    
    • gcc main.c 将生成a.out文件

    • vi mian.c 添加头文件

    #include <stdio.h>
    
    • gcc -o main main.c
      生成一个可执行文件main
    • 执行./main
      打印结果:11111
      这个main文件在Android手机中不能执行,这是因为两个设备不同,对应的指令集不同

    想要在ubuntu中编译出在Android手机中可以执行的文件,需要下载NDK中对应的交叉编译工具

    二 ubuntu配置NDK

    1 下载 wget

    找到ndk的官网下载地址,注意选Linux平台

    wget ndk的url地址
    

    2 配置临时环境变量

    export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    
    

    3 编译main.c

     $CC main.c
    

    <stdio.h>报错,

    @ubuntu:~$ export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    bao@ubuntu:~$ $CC main.c
    main.c:1:19: fatal error: stdio.h: No such file or directory
     #include <stdio.h>
                       ^
    compilation terminated.
    

    需要链接对应的头文件,涉及到链接头文件和库文件的配置

    三 编译时配置

    如果被编译的文件链接了其他头文件或者库文件,需要进行配置

    类似 javac -classpath xxx

    1 查找头文件

    --sysroot=XX
        使用xx作为这一次编译的头文件与库文件的查找目录,查找下面的 usr/include 目录
    -isysroot XX
        头文件查找目录,覆盖--sysroot ,查找 XX/usr/include
    -isystem XX
        指定头文件查找路径(直接查找根目录)
    -IXX
        头文件查找目录
    

    优先级:
    -I -> -isystem -> sysroot

    gcc --sysroot=目录1 -isysroot 目录2 -isystem 目录3 -I目录4  main.c
    查找 目录1/usr/lib 的库文件
    目录2 /usr/include 的头文件	
    还去查找 目录3 下的头文件
    还去查找 目录4 下的头文件
    

    2 查找库头文件

    -LXX
    指定库文件查找目录
    -lxx.so
    指定需要链接的库名

    gcc -L目录1 -l库名
    

    例子: 链接ndk的日志库

    gcc -LC:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib
    -llog  -lGLESv2
    

    还可以

    gcc --sysroot=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm
    -llog -lGLESv2
    

    四 使用NDK的gcc和.h编译main.c

    export CC=android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    
    export AAA="--sysroot=/home/bao/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/bao/android-ndk-r17c/sysroot/usr/include -isystem /home/bao/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
    
    $CC $AAA -pie main.c -o main
    
    

    生成main,用file查看,发现是ARM架构

    bao@ubuntu:~$ file main
    main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, not stripped
    

    将main文件放到具有root权限的手机中./main执行,能够输出:111,这样就编译生成了一个Android可用的可执行文件

    五 注意

    • NDK的版本用17的,不能太新,否则没有gcc;选择Linux平台
    • 注意上述命令的地址根目录,要替换成你的ndk所在根目录

    /home/bao 改成你的ndk所在路径

    • 为了再Android手机中能够执行main,编译必须加上pie
    • export是临时环境变量,关闭命令行后失效
    展开全文
  • x1:新建立一个安卓工程   0x2:编写调用so代码和方法定义 在MainActivity.java同目录下创建一个JniGg.java文件,用于调用so   0x3: 生成文件头 .h 文件 在这个目录可以看到我们编写好并且已经编译的 class 文件...
  • linux安装jdk sudo add-apt-repository ppa:webupd8team/java sudo apt-get update ...linux安装安卓sdk wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz (下载) tar xvzf androi
  • 参考链接 ... 官网下载ndkr16b 解压完以后放到/opt目录下 vim /etc/profile ...export NDK_HOME=/opt/android-ndk-r16b #(就是解压出来之后的文件夹路径,这里是要改的) export PATH=$PATH:$NDK_...
  • 安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip
  • 第一次接触安卓,Java也接触不多。现在有一个LINUX程序要移植到android上去,有点懵。求教一下,需要的开发...是在LINUX下直接配置NDK么? 之前window移植是直接在android studio上做的,LINUX没头绪,求教,不胜感谢
  • 安卓 NDK native 方法 crash 定位分析 addr2line工具 在 ndk/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/bin 目录下 用法 addr2line [OPTIONS] addr [addr ...] OPTIONS -a --addresses:在...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 199
精华内容 79
关键字:

linuxndk安卓

linux 订阅