2018-08-31

今天尝试了一下编译so文件。

最开始是按照这个博主来操作的https://blog.csdn.net/tianshuai4317618/article/details/79073836

后来我的Android Studio (v3.1.3)说这种方式不再支持了,叫我换CMake。

然后我就换CMake了,可是一直报这个错

Build command failed.
Error while executing process D:\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {-HG:\AndroidStudioProjects\SoTest\app -BG:\AndroidStudioProjects\SoTest\app\.externalNativeBuild\cmake\debug\armeabi-v7a -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-14 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=G:\AndroidStudioProjects\SoTest\app\build\intermediates\cmake\debug\obj\armeabi-v7a -DCMAKE_BUILD_TYPE=Debug -DANDROID_NDK=D:\sdk\ndk-bundle -DCMAKE_CXX_FLAGS= -DCMAKE_TOOLCHAIN_FILE=D:\sdk\ndk-bundle\build\cmake\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=D:\sdk\cmake\3.6.4111459\bin\ninja.exe -GAndroid Gradle - Ninja}
CMake Error in CMakeLists.txt:
The CMAKE_C_COMPILER:
D:/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
The CMAKE_CXX_COMPILER:
D:/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "G:/AndroidStudioProjects/SoTest/app/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".
Build command failed.
Error while executing process D:\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {-HG:\AndroidStudioProjects\SoTest\app -BG:\AndroidStudioProjects\SoTest\app\.externalNativeBuild\cmake\release\armeabi-v7a -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-14 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=G:\AndroidStudioProjects\SoTest\app\build\intermediates\cmake\release\obj\armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DANDROID_NDK=D:\sdk\ndk-bundle -DCMAKE_CXX_FLAGS= -DCMAKE_TOOLCHAIN_FILE=D:\sdk\ndk-bundle\build\cmake\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=D:\sdk\cmake\3.6.4111459\bin\ninja.exe -GAndroid Gradle - Ninja}
CMake Error in CMakeLists.txt:
The CMAKE_C_COMPILER:
D:/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
The CMAKE_CXX_COMPILER:
D:/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "G:/AndroidStudioProjects/SoTest/app/.externalNativeBuild/cmake/release/armeabi-v7a/CMakeFiles/CMakeOutput.log".

一直以为要配置什么变量,就去学CMakeLists.txt的语法,也没找到那个变量,不了了之了。

天无绝人之路,后来我碰运气,打到了解决办法

感谢博主https://blog.csdn.net/qq_36630050/article/details/80708685

我以前的ndk是17的,我按他说的改为ndk 16的就好了。

2018-09-19

今天打aar模块包的时候,不知道为什么,so文件没有打包进去,我是手动加进去的。好奇怪,导出aar没有包括so文件。

2019-04-22

04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk I/art: Rejecting re-init on previously-failed class java.lang.Class<cn.angelshelter.app.apicloud.ffmpeg.link.FFmpegLink>
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: java.lang.reflect.InvocationTargetException
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at java.lang.reflect.Method.invoke(Native Method)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at com.uzmap.pkg.uzcore.uzmodule.a$a.a(Unknown Source)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at com.uzmap.pkg.uzcore.uzmodule.a$1.run(Unknown Source)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at android.os.Looper.loop(Looper.java:135)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5569)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at java.lang.reflect.Method.invoke(Native Method)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
04-22 22:49:57.069 31357-31357/com.apicloud.pkg.sdk W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
04-22 22:49:57.079 31357-31357/com.apicloud.pkg.sdk W/System.err: Caused by: java.lang.UnsatisfiedLinkError: cn.angelshelter.app.apicloud.ffmpeg.link.FFmpegLink
04-22 22:49:57.079 31357-31357/com.apicloud.pkg.sdk W/System.err: at cn.angelshelter.app.apicloud.ffmpeg.link.FFmpegLink.getInt(Native Method)
04-22 22:49:57.079 31357-31357/com.apicloud.pkg.sdk W/System.err: at cn.angelshelter.app.apicloud.ffmpeg.FFmpegModule.jsmethod_test(FFmpegModule.java:19)
04-22 22:49:57.079 31357-31357/com.apicloud.pkg.sdk W/System.err: ... 12 more

原因是我依赖了一个其它的第三方动态库so,但是我把那个so加进apk直接闪退,晕,如果把那个依赖库去掉就ok了。

2018-05-05

W/System.err: java.lang.reflect.InvocationTargetException
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
at com.uzmap.pkg.uzcore.uzmodule.a$a.a(Unknown Source)
at com.uzmap.pkg.uzcore.uzmodule.a$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6268)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:916)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:806)
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libavutil-55.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:989)
at java.lang.System.loadLibrary(System.java:1530)
at cn.angelshelter.app.apicloud.ffmpeg.link.FFmpegLink.<clinit>(FFmpegLink.java:23)
at cn.angelshelter.app.apicloud.ffmpeg.link.FFmpegLink.getInt(Native Method)
at cn.angelshelter.app.apicloud.ffmpeg.FFmpegModule.jsmethod_test(FFmpegModule.java:19)
... 10 more

用别人打好的so包。如果是

System.loadLibrary("swresample");//导入生成的链接库文件
System.loadLibrary("avcodec");//导入生成的链接库文件
System.loadLibrary("avutil");//导入生成的链接库文件

这样的顺序,就会报上面的错误 :

正确的写法是

System.loadLibrary("avutil");//导入生成的链接库文件
System.loadLibrary("swresample");//导入生成的链接库文件
System.loadLibrary("avcodec");//导入生成的链接库文件

。不过后来我自己打的包,却没这个限制。

2019-05-12

-- ::30.922 -/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.apicloud.pkg.sdk, PID:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.apicloud.pkg.sdk-1/base.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.apicloud.pkg.sdk-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.apicloud.pkg.sdk-/lib/arm64, /system/fake-libs64, /data/app/com.apicloud.pkg.sdk-/base.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.apicloud.pkg.sdk-/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libsec.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:)
at java.lang.System.loadLibrary(System.java:)
at com.uzmap.pkg.uzcore.external.Enslecb.<clinit>(Unknown Source)
at com.uzmap.pkg.uzcore.external.Enslecb.xsm(Unknown Source)
at com.uzmap.pkg.uzcore.external.g.b(Unknown Source)
at com.uzmap.pkg.uzcore.t.a(Unknown Source)
at com.uzmap.pkg.uzapp.UZApplication.onCreate(Unknown Source)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:)
at android.os.Handler.dispatchMessage(Handler.java:)
at android.os.Looper.loop(Looper.java:)
at android.app.ActivityThread.main(ActivityThread.java:)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)

这个是我启用了ndk编译后,没有找到对应的架包造成的,就是ndk打出来的是全平台的,而第三方SDK只是指定平台的。所以要在build.gradle加上

android{
defaultConfig {
ndk{
abiFilters "armeabi"
}
}
}

指定只打包armeabi平台的。

如果加了还是会有,“就清缓存” 。build\intermediates\cmake,这里面的删除了。我的就是多了一个arm64-v8a平台。

so文件相关的更多相关文章

  1. Android根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...

  2. [ARM] Cortex-M Startup.s启动文件相关代码解释

    1. 定义一个段名为CSTACK, 这里: NOROOT表示如何定义的段没有被关联,那么同意会被优化掉,如果不想被优化掉就使用ROOT. 后面的括号里数字表示如下: (1):这个段是2的1次方即2字节 ...

  3. 文件相关操作工具类——FileUtils.java

    文件相关操作的工具类,创建文件.删除文件.删除目录.复制.移动文件.获取文件路径.获取目录下文件个数等,满足大多数系统需求. 源码如下:(点击下载 FileUtils.java) import jav ...

  4. python 文件相关知识

    字符编码相关 什么是字符编码 字符编码的类型 字符编码的使用 python2和python里字符编码的区别 文件的相关 文件的基础操作 打开文件的模式 字符编码 什么是字符编码在计算机里只识别二进制, ...

  5. python Tags 母板 组件 静态文件相关 自定义simpletag inclusion_tag

    一.Tags(一)for 1.基本用法 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% e ...

  6. Head First Python-Python中与文件相关的操作-读、处理、写

    最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...

  7. Git基本命令 -- 基本工作流程 + 文件相关操作

    可以先找一个已经被git管理的项目, 我就使用这个项目吧: https://github.com/solenovex/ID3-Editor 基本工作流程 克隆以后呢, 进入该目录查看一下状态: 然后添 ...

  8. linux 命令 — 文件相关

    使用文件相关命令 dd 用来生成任意大小的文件 dd if=/dev/zero of=junk.data bs=1m count=1 生成一个1m大小的文件,里面全部使用0填充 if: 指定输入文件, ...

  9. python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag

    一.昨日内容回顾 1.MVC和MTV框架 MVC:  model 模型 存写数据   view 视图 给用户展示页面 control 控制器 负责调度 传递指令 MTV: M:model 模型  OR ...

  10. 006.ks.cfg文件相关

    一 图形化生成ks.cfg文件 [root@server ~]# yum -y install system-config-kickstart #安装图形化kickstart工具 [root@serv ...

随机推荐

  1. 加载 AssetBundle 的四种方法

    [加载 AssetBundle 的四种方法] 1.AssetBundle.LoadFromMemoryAsync(byte[] binary, uint crc = 0); 返回AssetBundle ...

  2. js保留小数点后面几位的方法

    原文地址: http://www.jb51.net/article/45884.htm 四舍五入以下处理结果会四舍五入: ? 1 2 var num =2.446242342; num = num.t ...

  3. 超详细 Nginx 极简教程

    什么是Nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse Proxy ...

  4. verilog task1

    问题描述: 设计中需要重复多次施加一种激励,每一次激励的施加过程,都可以划分为4个部分,如图所示. 每一次施加的激励只有第二部分的数据有变化(数据格式无变化).所以顶层的Testbench代码如下: ...

  5. 唯品会海量实时OLAP分析技术升级之路

    本文转载自公众号 DBAplus社群 , 作者:谢麟炯 谢麟炯,唯品会大数据平台高级技术架构经理,主要负责大数据自助多维分析平台,离线数据开发平台及分析引擎团队的开发和管理工作,加入唯品会以来还曾负责 ...

  6. django的中间件:process_request|process_response|process_view|process_exception

    MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware. ...

  7. C语言常用标准库函数

    数学函数: 在math.h中 abs(x) :求整型数x的绝对值 cos(x):x(弧度)的余弦 fabs(x):求浮点数x的绝对值 ceil(x):求不小于x的最小整数 floor(x):求不大于x ...

  8. jquery ajax 中实现给变量赋值

    我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去, ...

  9. 解决JFinal多文件上传时只获取到第一个文件名

    我的思路: 用户生成时随即生成一串随机字符作为该用户的文件上传目录,并保存该字符串到用户的某一字段.需要显示上传的附件时,遍历这个文件夹.上传时可把文件名设置为上传时间. 1.生成上传路径 可写在注册 ...

  10. C#按制定的环境编译替换不出对应的配置项的解决措施。

    1. 比如选择的 编译或者发布 环境是 QA ,但是QA里面配置的 替换节点 实际并没有被替换 解决方案: 在项目文件.csproj中最底部加入一下代码,应该成功.成功将QA的配置节点 替换掉默认的 ...