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

    千次阅读 2019-07-30 19:32:03
    简介 xxx 分类 armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64

    简介

    xxx

    分类

    • armeabi
    • armeabi-v7a
    • arm64-v8a
    • x86
    • x86_64
    • mips
    • mips64
    展开全文
  • Android apk中so库文件未压缩

    万次阅读 热门讨论 2020-03-05 17:59:12
    查看apk包,发现apk 包中so库文件未被压缩. 但是一个类似项目,相同版本却没有问题 升级前 升级后 升级后Raw File Size 正好是未压缩的大小 可能原因 不同版本AGP gradle build task 实现不一样, 再某情况下回不进行...

    背景:

    升级AS 3.6.1, 并且升级project build.gradle AGP 到3.6.1, 一个项目发现打包后文件骤然增大,
    查看apk包,发现apk 包中so库文件未被压缩.
    但是一个类似项目,相同版本却没有问题

    升级前

    升级前

    升级后

    升级后

    升级后Raw File Size 正好是未压缩的大小

    可能原因

    不同版本AGP gradle build task 实现不一样, 再某情况下回不进行so 库压缩处理

    解决方案

    AGP 降级到3.5.3 , AS 不用降级

    参考

    关于*.SO压缩问题

    展开全文
  • Android将so库封装到jar包中并加载 之前写过将jar包和so库封装到jar包中的文章,但是没有考虑别人调用时需要加载so库的问题。因为so库放入jar之后,so就不是一个独立的.so文件了,用System.load()加载就会提示找不到...

    Android将so库封装到jar包中并加载其中的so库

    之前写过将jar包和so库封装到jar包中的文章,但是没有考虑别人调用时需要加载so库的问题。因为so库放入jar之后,so就不是一个独立的.so文件了,用System.load()加载就会提示找不到这个库,所以要想加载这个so 就需要把so 从jar 中提取出来,保存为临时文件,然后再加载。但是不能直接提取.so文件,需要把.so文件改成.jet文件封装到jar中,再进行提取拷贝。

    如何建立一个项目以及项目的结构还有模块我就不说,可以看我之前的文章:Android 将module中的jar、so包打包成jar或者aar文件
    我这里只是对so库封装到jar包做一些修改,这样方便后续项目加载so库。

    1.将so后缀改成.jet,然后放到下图目录中,如果有多个cpu架构可以放多个。再新建SysLoad.java类,这个类可以不用写代码。
    在这里插入图片描述
    2.修改build.gradle文件task makeJar(type: Jar)方法

    apply plugin: 'com.android.library'
    android {
        compileSdkVersion 29
        defaultConfig {
            minSdkVersion 22
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    
        sourceSets {
            main {
    //            jni.srcDirs = []
    //                jniLibs.srcDirs = ['src/main/jniLibs']//设置目标的so存放路径
            }
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
    
            lintOptions {
                abortOnError false
            }
        }
    
        task makeJar(type: Jar){
            //删除存在的
            delete 'build/libs/newsdk.jar'  //删除存在的
            archivesBaseName = 'newsdk'  //输出的jar包名称
            from(project.zipTree('build/intermediates/packaged-classes/release/classes.jar'))
            from(project.zipTree('build/intermediates/packaged-classes/release/libs/AMap_Search_V7.1.0_20191030.jar')) //需要打包的第三方jar包
    //        from fileTree(dir: "src/main/java", include: "**/*.so") //把src/main/java目录下包含的所有.so文件封装到jar包
            from fileTree(dir: "src/main/java", include: "**/*.jet") //把src/main/java目录下包含的所有.jet文件封装到jar包
            destinationDir = file('build/libs')  //打成jar包后存放的文件目录
        }
        makeJar.dependsOn(build)
    }
    
    dependencies {
        testImplementation 'junit:junit:4.12'
        implementation files('libs/AMap_Search_V7.1.0_20191030.jar')
    }
    

    3.点击makejar编译出jar包,将其引入到项目中,打开可以看到里面包含了a.jet和b.jet文件,如下图。
    在这里插入图片描述
    4.在项目中通过Java代码加载jar中的so库,这里只展示加载a.so库。原理:获取a.jet的文件流,再把文件流输入到临时文件a.so中, System.load()方法加载a.so文件(简单点说,就是把a.jet文件拷贝出来),这样就可以了。

    static {
        try {
            InputStream is = null;
            is =  SysLoad.class.getResourceAsStream("/com/example/libraryb/arm64-v8a/a.jet");
            File tempFile = File.createTempFile("a", ".so");
            FileOutputStream fos = new FileOutputStream(tempFile);
            int i;
            byte[] buf = new byte[1024];
            while ((i = is.read(buf)) != -1) {
                fos.write(buf, 0, i);
            }
            is.close();
            fos.close();
            System.load(tempFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }
    

    注意:提取a.jet文件时,要注意改一下/com/example/libraryb/arm64-v8a/a.jet路径,改成你自己的。

    展开全文
  • vscode 编译so库,并且引用so库调试

    千次阅读 2019-08-29 13:30:04
    本周就IDE选择、cpp程序编译、so库引用、jni编译方面走了一遍,从C++程序编写、编译调试,引用so库走了一遍,基本还好,没碰到什么难点! 1. IDE选择VsCode,只要下载几个插件就可以进行开发了: 2.在Vscode 中...

    刚刚自学接触C++,上周看了一个星期的C++ Primer,需要记忆的东西特别多!

    本周就IDE选择、cpp程序编译、so库引用、jni编译方面走了一遍,从C++程序编写、编译调试,引用so库走了一遍,基本还好,没碰到什么难点!

    1. IDE选择VsCode,只要下载几个插件就可以进行开发了:

           

     2.在Vscode 中打开一个新建文件夹,进行程序编写,一个头文件、两个cpp代码实现文件:

        

     

    3. 编译so文件,编译工具用的是g++,命令如下:

       g++ makeso.cpp Jian.cpp -fPIC -shared -o libMakeSo.so

       注意编译的cpp文件中,不能超过两个main函数,否则就像java在编译的时候,多个入口会报错!

     

    4.VSCode中引用so库进行测试,新建testms.cpp:

          

    5.task.json中引用so库,task.json和launch.json生成的方法,可以在运行的时候,自动提示生成:

       

    主要是增加-L和-l(小写L)参数,进行 so库路径命令参数配置 , 配置好后就可以进行代码调试!

    6.jni的编写,首先要拷贝jni的头文件jni.h 和 jni_md.h到项目中,编写好jni接口后,可以利用ndk-build进行编译出so库.

    展开全文
  • camke构建自己的三方so库 学会使用cmake管理自己jni文件 学会使用cmake调用三方的so库 1.CMakeLists.txt 构建so库 创建jni的工具类JniUtils : 这个类的原本用途是,在工程里用来管理jni的方法,和加载so...
  • 第三方so库中函数一部分为JNI接口函数,一部分为非JNI接口函数,如何在安卓中调用非JNI接口函数?若自己写一个so库来调用第三方库并调用其中非JNI接口函数如何实现
  • 加载so库

    千次阅读 2016-07-11 11:09:20
    * 1、so库需放在classpath下,否则报错: Can't load library * 2、so库需放在/usr/local/lib下(可选路径查看/etc/ld.so.conf),并设权限777, * 否则报错:cannot open shared object file * * @WARN * 项目...
  • linux环境下生成a库和so库

    千次阅读 2018-03-20 14:44:06
    一、编译链接库(a库和so库)方法一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,...
  • python调用so库

    千次阅读 2019-12-11 13:54:57
    python调用so库 https://blog.csdn.net/frankie110/article/details/8724509 我厂大部分的code都是采用C++写的,有的时候需要进行一些数据分析,又需要用c++里面的很多函数,例如url的转换函数,hash编码的函数,...
  • makefile编译so库

    千次阅读 2018-02-27 12:20:07
    makefile编译so库 在anroid中,会看到很多原生的so库,so即shared library,用cc编译的时候,指定一下-shared的参数即可编译,怎么弄的呢,举个例子 so的生成 还是上一篇博客的程序 vim Makefile all : ...
  • 动态加载so库

    千次阅读 2019-05-27 17:46:41
    今天在集成虹软的人脸demo的时候,发现so库太大也就导致apk体积大。于是用动态加载,理论上是从服务器下载,然后放到指定位置进行加载,这里先在本地进行拷贝。一共两个文件:libarcsoft_face.so和libarcsoft_face_...
  • 一、android9.0调用so库遇到崩溃的问题:在android4.4上是运行正常的。 查看原因:是由于通过 System.loadLibrary(libName); 调用自己写的caijkffmpeg.so加载不成功。 2019-11-06 12:36:46.376 22546-22546/...
  • 上一篇是怎么生成调用so库这边来创建jar库,用jar库调用so库,程序直接调用jar库就可以了结合上篇:Android Studio中so库的创建与使用、jar库(jar调用so库)的创建与使用(一)在上篇工程菜单File->New-&...
  • camke构建自己的三方so库 学会使用cmake管理自己jni文件 学会使用cmake调用三方的so库 最后分析自己开发过程中遇到的坑 1.CMakeLists.txt 构建so库 创建jni的工具类JNI : 这个类的原本用途是,在工程里用来...
  • so库方法的调用过程

    千次阅读 2019-06-23 02:14:12
    但程序运行时,这些地址早已经确定,那程序引用so库中的这些代码地址如何确定呢,这就是这次要整理学习的内容,即so库的在链接和执行时的加载过程。 静动态库 在聊so库之前先聊聊静态库。为了程序更加优雅...
  • ijkplayer 编译so库过程

    千次阅读 多人点赞 2016-11-11 11:22:46
    ijkplayer 编译so库过程最新的项目需要使用视频播放功能.Android系统提供的播放功能大家都知道,那就是个坑.然后找第三方的播放库来使用 找到比较合适的有三个: 1.Google 提供的ExoPlayer 播放库.GitHub_...
  • 安卓,so库动态载入

    千次阅读 2019-08-17 18:00:41
    so库动态载入,修复应用无法安装。 (so库动态加载示例。从asset目录加载so库,安装时不导出so库,不会导致安装失败,运行时生成并载入) com.google.android.finsky.cu.k.onReceive(20): Error -504 ...
  • linux下将c/c++编译成so库gcc -fPIC -shared Cat.c -o libcat.so-fPIC是压制警告 -shared是生成动态库 Cat.c是要编译的文件 -o是要生成的文件的名称linux下将c/c++生成可执行文件gcc -rdynamic -o main main.c -...
  • Android CMake 编译so库

    千次阅读 2017-11-27 15:49:57
    Demo地址:https://github.com/seeways/NDKDemoC++编译so库创建项目 使用默认的C++支持库建立项目后,会默认生成一个模板,有一个简单的Cpp程序,和MainActivity调用示例 c++#include #include <string>extern "C
  • 库的生成:项目工程 TestProj 中使用zlog开源日志库,使用两种方式编译生成so库: A:使用源码中自带makefile进行编译,会产生libzlog.a/libzlog.so/libzlog.so.1/libzlog.so.1.1(A) 四个文件; B:通过zlog 中的...
  • ubuntu下生成a库和so库

    千次阅读 2018-05-29 17:43:45
    a库和so库分别是linux系统下的静态链接库和动态链接库linux下.o是目标文件,相当于windows下的.obj文件,.a是静态链接库。是好多个.o合在一起的,用于静态链接,.so是静态链接库,是shared object,相当于windows下...
  • GDB的so库调试

    千次阅读 2019-06-03 14:40:00
    假设在/Test目录下有一个可执行文件main以及一个lib.so库文件,同时lib.so的源代码为lib.c 现希望调试lib.so库 cd /Test # 进入目标文件夹 $GDB main # 使用GDB调试main程序 (GDB) directory /test ...
  • cmake编译so库

    千次阅读 2018-05-16 17:10:22
    在旧项目中导入cmake工具并使用 1.初始化环境 选择Link C++ 在app模块下新建一个CMakeLists.txt文件 Build System选择CMake ...如要过滤生成不同平台的so库,可在app模块的build.gradle添...
  • 关于第三方so库调用网上的教程看了很多,但是因为非常小白,很多细节还是不明白, 关于so库的导入已经了解了,但是Cmakelists.txt文件里面该如何编写, 以及Java和so库如何通信,调用函数还是搞不懂。 比如说我有a....
  • SO库版本号管理

    千次阅读 2017-02-10 16:02:40
    编写SO库文件时可以输入版本号 调用SO库文件中特定的函数可以输出版本号
  • 五.NDK调用so库

    千次阅读 2018-10-04 00:05:23
    NDK调用so库,和原生.h和.cpp的方式大同小异,调用so库实际是将so库当成cpp使用 一.添加要被调用的so库 二.CMakeLists.txt添加链接 # 指定cmke版本 cmake_minimum_required(VERSION 3.4.1) include_directories...
  • 动态加载so库文件

    千次阅读 2016-06-07 15:35:36
    使用动态加载so库文件可以减小apk文件的大小,如:so库文件较大时,使用动态加载,在需要使用so库文件或者满足其他条件时,提示用户下载或自动下载,这样apk文件的大小就可以大大降低。 Android加载so库文件的机制...
  • 使用Makefile链接so库文件

    千次阅读 2018-11-13 10:36:47
    使用Makefile链接so库文件
  • android 关于mk如何引用其它so库

    千次阅读 2020-06-12 15:42:29
    通常,开发android的软件,常常需要编译so库,然编译的这个so库,需要调用多个其它的so库。这里主要记录一下,编译so库时,调用其它so库的mk,是怎么写的。 这里讲的示例:需要编译出libtest3.so,它需要调用...
  • Android.mk中配置so库

    千次阅读 2019-01-24 11:13:39
    Android.mk中配置so库 在系统源码开发环境下,往往需要单编某个模块来debug,会涉及到打包so的问题。 第三方so库打包到apk 1、如何判断so库文件是32 bit/64 bit? 2、 如何将so库打包到apk ? 如何判断第三方库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,424
精华内容 11,769
关键字:

so库