精华内容
下载资源
问答
  • AndroidStudio编译so库

    2021-03-10 03:02:27
    在jni目录下,运行命令ndk-build(需要将其加入到系统环境变量),即可在src/main/libs目录下生成so ndk-build 10.在build.gradle中添加字段 android { ... sourceSets { main() { jniLibs.srcDirs = ['src/main/libs'...

    步骤

    1.新建工程com.example.jnitest

    2.新建JniTest.java (MainActivity同级目录下)

    package com.example.jnitest;

    public class JniTest {

    static {

    System.loadLibrary("JniTest");

    }

    public native static String getString();

    }

    3.Build->Make Project,在app的build目录生成.class文件

    JniTest\app\build\intermediates\javac\debug\classes>

    4.在步骤3目录下,运行javah命令生成.h文件

    javah -jni -classpath . com.example.jnitest.JniTest

    5.在app/src/main目录下新建一个jni文件夹

    6.将生成的.h文件拷贝到步骤5中jni文件夹

    7.在jni目录下,新建c/c++source file,如main.c,并实现.h中方法

    #include "jni.h"

    #include "com_example_jnitest_JniTest.h"

    JNIEXPORT jstring JNICALL Java_com_example_jnitest_JniTest_getString(JNIEnv *env, jclass jz){

    return (*env)->NewStringUTF(env,"this is the first time for me to use jni");

    }

    8.在jni目录下,新建Android.mk和Application.mk文件

    Android.mk

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE := JniTest

    LOCAL_SRC_FILES := main.c

    include $(BUILD_SHARED_LIBRARY)

    Application.mk

    APP_ABI := all

    9.在jni目录下,运行命令ndk-build(需要将其加入到系统环境变量),即可在src/main/libs目录下生成so

    ndk-build

    10.在build.gradle中添加字段

    android {

    ...

    sourceSets {

    main() {

    jniLibs.srcDirs = ['src/main/libs']

    jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程

    }

    }

    }

    11.在MainActivity中调用

    public class MainActivity extends AppCompatActivity {

    private TextView mTextView;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mTextView = findViewById(R.id.txt);

    }

    public void btnClick(View v){

    mTextView.setText(JniTest.getString());

    }

    }

    12.整个工程截图

    5efdf8b449221d52f95d2a18f5fdfd00.png

    参考链接

    https://blog.csdn.net/leilifengxingmw/article/details/71598687

    本文地址:https://blog.csdn.net/robothj/article/details/107374692

    希望与广大网友互动??

    点此进行留言吧!

    展开全文
  • android NDK编译so库的两种方法 Android Studio中写好native方法,编译出so库,将库(通过unity editor)导入,设置好,在java中就可以用native方法了。Android项目就是java的。 有两种方法可以编译so文件,第一种是...

    android NDK编译so库的两种方法

    Android Studio中写好native方法,编译出so库,将库(通过unity editor)导入,设置好,在java中就可以用native方法了。Android项目就是java的。

    有两种方法可以编译so文件,第一种是通过android studio编译,第二种是通过Android CMake编译。

    通过Android CMake编译

    C:\huawei\java引用native+生成so\huawei 该项目是通过Android CMake编译的,建立一个native c++项目,新建的项目里面有实例。在java中调用so库声明,定义相应的native方法,然后在c++中实现方法,还要实现CMakeLists.txt文件,配置build.gradle,点击tool bar中的build->make project,即可在${ProjectPath}\app\build\intermediates\cmake\debug\obj中生成so库。

    通过android studio编译

    C:\huawei\java引用native+生成so\nativePlugin 该项目是通过Android Studio编译so的,(https://blog.csdn.net/leilifengxingmw/article/details/71598687 详细介绍),需要建立MyJni.java(导入so文件,定义native方法),通过make project生成.class文件(路径不一定),新建c/c++source file实现native方法,新建Android.mk和Application.mk文件。

    Android.mk
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    LOCAL_MODULE := MyJni
    LOCAL_SRC_FILES := Test.c
    include $(BUILD_SHARED_LIBRARY)

    Application.mk
    APP_ABI := all
    然后在终端进入到jni目录,输入指令 ndk-build,就会生成相应的so文件。

    展开全文
  • 编译生成so库gcc -fPIC -shared caculate.c -o libcaculate.so-fPIC 压制警告-shared 动态库-o 生成目标的文件名caculate.cint add(int a,int b){return (a*b);}编译生成可执行文件gcc -rdynamic -o main main.c-...

    编译生成so库

    gcc -fPIC -shared caculate.c -o libcaculate.so

    -fPIC 压制警告

    -shared 动态库

    -o 生成目标的文件名

    caculate.c

    int add(int a,int b){

    return (a*b);

    }

    编译生成可执行文件

    gcc -rdynamic -o main main.c

    -rdynamic 生成可执行文件

    -o 目标文件名

    main是linux环境下的一个可执行文件。

    main.c

    #include

    #include

    //Linux提供的一套API来动态装载库

    #include

    typedef int (*ADD)(int,int);

    int main(){

    //dlopen,打开一个库,并为使用该库做些准备

    void *handle=dlopen("./libcat.so",RTLD_LAZY);

    ADD add=NULL;

    //dlsym,在打开的库中查找符号的值

    *(void **)(&add)=dlsym(handle,"add");

    int reslut=add(2,5);

    printf("%d\n",reslut);

    return 0;

    }

    一次性手动编译动态库

    gcc -c main.c -o main.o

    gcc -c minus.c -o minus.o

    gcc -c mulit.c -o mulit.o

    gcc -c plus.c -o plus.o

    gcc main.o minus.o mulit.o plus.o -o myapp

    展开全文
  • 编译生成so库gcc -fPIC -shared caculate.c -o libcaculate.so-fPIC 压制警告-shared 动态库-o 生成目标的文件名caculate.cint add(int a,int b){return (a*b);}编译生成可执行文件gcc -rdynamic -o main main.c-...

    编译生成so库

    gcc -fPIC -shared caculate.c -o libcaculate.so

    -fPIC 压制警告

    -shared 动态库

    -o 生成目标的文件名

    caculate.c

    int add(int a,int b){

    return (a*b);

    }

    编译生成可执行文件

    gcc -rdynamic -o main main.c

    -rdynamic 生成可执行文件

    -o 目标文件名

    main是linux环境下的一个可执行文件。

    main.c

    #include

    #include

    //Linux提供的一套API来动态装载库

    #include

    typedef int (*ADD)(int,int);

    int main(){

    //dlopen,打开一个库,并为使用该库做些准备

    void *handle=dlopen("./libcat.so",RTLD_LAZY);

    ADD add=NULL;

    //dlsym,在打开的库中查找符号的值

    *(void **)(&add)=dlsym(handle,"add");

    int reslut=add(2,5);

    printf("%d\n",reslut);

    return 0;

    }

    一次性手动编译动态库

    gcc -c main.c -o main.o

    gcc -c minus.c -o minus.o

    gcc -c mulit.c -o mulit.o

    gcc -c plus.c -o plus.o

    gcc main.o minus.o mulit.o plus.o -o myapp

    展开全文
  • 编译自己的so库 可以直接用android studio编译,新建一个ndk项目,新建一个test 类 test.h代码 // // Created by ROCK on 2021/1/20. // #ifndef NDKTEST_TEST_H #define NDKTEST_TEST_H #include <string>...
  • SKD 7.0 以后使用串口serialport so库需要重新编译,不然会有提示弹出,解决方式重新编译最新so库。 https://github.com/cepr/android-serialport-api github下载地址 jni 文件 通过studio重新编译 so库 通过以上...
  • } Paste_Image.png 最后在build.gradle defaultConfig里面添加NDK配置: //ndk编译生成.so文件 ndk { moduleName "test" abiFilters "armeabi", "armeabi-v7a", "x86", "mips" } 根目录下添加so库目录: sourceSets ...
  • 2 .so库编译 在本例中,so库编译分为两部分,第一部分实现核心功能:加法运行,并打包为二进制静态库(static library);第二部分将静态库及JNI代码编译为.so库libjnicall.so。这两部分代码全部存放在jni目录...
  • gcj -fpic -shared -o libSoDemo.so SoDemo.java二:在环境变量设置:修改/etc下的profile文件加入这两句:LD_LIBRARY_PATH=libname.so的位置export LD_LIBRARY_PATH或者直接放在%JAVA_HOME%/jre/lib/i386/下面。...
  • 最近用cmake替代ndk-build编译so库,编译出来的so库打出很多,ndk-build编译的400k左右,cmake编译出的达到4.5M。Gradle插件的版本是:gradle:3.0.0,gradle版本是:gradle-4.1-all.zip。build.gradle cmake 配置...
  • 背景:android studio上需要使用别的同事用linux下(c++写)编译好的的so库,注意不是用c++源码放在android studio上编译; 实现原理:android studio实现JNI规范的接口,再用这套接口去调用linux下编好的so库,这个...
  • py文件编译so动态

    2021-04-20 14:39:06
    2. 编译py文件生成so库 Cython可以帮助程序带来性能的提升,主要原理是:先将py文件转换成c文件,再将c文件编译成so(Unix)或pyd(windows)。其带来的另一个好处是难以破解。 from distutils.core impo
  • linux下编译的时候,经常会在编译命令中加入一些自定义的编译选项或者参数,比如 gcc -DYF_DEBUG 之类,这样的方式是比较灵活可以...但对于lib或者so库编译会包含一定的风险,造成一些恶心的麻烦;比如上面说的 YF_...
  • windows系统下gcc编译C文件为so共享1. windows系统安装gcc编译工具2. 利用gcc编译多个c文件3. 利用python工具验证生成的so共享 1. windows系统安装gcc编译工具 对于工作机是windows又不想装linux虚拟机的朋友,...
  • linux中编译静态(.a)和动态(.so)的基本方法_only youlinux中编译静态(.a)和动态(.so)的基本方法2007-10-24 14:19 静态在 linux在 linux 环境中 , 使用 ar 命令创建静态文件 .如下是命令的选项 :d 从指定...
  • 这里主要记录一下,编译so库时,调用其它so库的mk,是怎么写的。 这里讲的示例:需要编译出libtest3.so,它需要调用libtest1.so,libtest2.so 1. 在android 源码下编译 LOCAL_PATH:= $(call my-dir) include $(CLEAR...
  • 一、实现思路 1.创建一个可供java 代码调用的本地函数 2.将需要实现本地实现的java代码加上native声明 ...5.编写Android.mk,使用mm命令,编译该jni模块为so库 6.在java类中加载此so库 二、源码如下sdk/device/roc
  • 使用IDA反编译.so文件并修改

    千次阅读 2021-05-13 10:53:10
    使用IDA反编译.so文件并修改简述之前一直在做应用层的开发很少接触底层,总感觉底层是一个很神秘的地方。最近各种原因之下有一些逆向的工作,但是好多应用的...例子是我最近分析的一个项目,项目中数据是从.so库处...
  • 底层播放器为了对播放地址进行校验,需调用/system/lib下的so库;因此需要将c文件编译成静态链接库,本文采用Makefile的方式,基于安卓ndk实现: 源码: #调用:$(NDKHOME)\prebuilt\windows\bin\make执行 ...
  • ldd 查看 elf文件依赖的 so 动态链接可以 exportLD_LIBRARY_PATH=/path 设置 so文件的路径,nm -u *.so 或者 nm|grep U 查看那些在 动态链接中的符号。...但是如果你的编译的是so文件,如果符...
  • 参考链接:https://blog.csdn.net/chenjinlong126/article/details/78990350一.制作so文件:libadd_c.so或libadd_cpp.so1、add.c:int add(int a...}编译:gcc -shared -fpic -lm -ldl -o libadd_c.so add.c2、add.cp...
  • Android openCV+ openCV-contrib 编译so文件

    千次阅读 2021-11-11 11:08:59
    Android openCV+ openCV-contrib 编译so文件编译环境编译配置导入 微信扫码引擎是一款基于开源引擎ZXing,并高度优化和深度改造的高性能轻量二维码识别器。主要特点如下: 基于CNN的二维码检测 基于CNN的二维码增强...
  • 调用动态,先加#include //用于动态管理的系统头文件(1)dlopen()第一个参数:指定共享的名称,将会在下面位置查找指定的共享.第二个参数:指定如何打开共享。-RTLD_NOW:将共享中的所有函数加载到内存...
  • c++将.cpp编译为.so文件

    千次阅读 2021-03-24 14:23:30
    2.先直接编译.cpp检查代码没问题 a.cpp内容: #include <iostream> #include "a.h" void A::readImg(char* path) { B b; b.readImg(path); } a.h内容: #ifndef A_H_ #define A_H_ #include "b.h" ...
  • image.png这里注意一下,刚开始我用的ndk版本是ndk-17b,在编译该版本的ffmpeg时始终失败,后来发现好多网友遇到这问题,某网友给出的建议是ndk版本用ndk-14b,尝试后终于成功了。你可以尝试新版的,如果编译成功...
  • libandroid.so——frameworks/base/native/androidlibandroid_runtime.so——frameworks/base/core/jnilibandroidfw.so——frameworks/base/libs/androidfwlibaudioutils.so——system/media/audio_utilslibbinder....
  • Linux下编译JNI so库

    2021-07-15 19:47:23
    本来以为拿到的会是源码,结果只有一个C++接口头文件,加两个so库(一个是算法具体实现,另一个是算法依赖的加密类so库),拿到算法文件后就蒙了,之前还没搞过用NDK编译so库时依赖链接另一个so库。。想到领导...
  • 这意味着当引入一个新的预编译.so文件,而且项目中还存在其他的.so文件时,我们需要首先确认新引入的.so文件使用的C++运行时是否和已经存在的.so文件一致。 没有为每个支持的CPU架构提供对应的.so文件 这一点在前文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 212,170
精华内容 84,868
关键字:

如何编译so库