安卓,so库动态载入

so库动态载入,修复应用无法安装。


(so库动态加载示例。从asset目录加载so库,安装时不导出so库,不会导致安装失败,运行时生成并载入)

 

 

com.google.android.finsky.cu.k.onReceive(20): Error -504 while installing sc.game.farm: INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2

INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2

 

修复方法:


1、将AssetsSo.jar添加至项目的lib目录下:

2、剪切原libs目录下,so对应的目录,至assets/so/目录下

3、设置Application为sc.tool.so.AssetsSoApp

4、编译运行项目即可

 

AssetsSo.zip(下载)


附录:

AssetsSo实现原理,详细说明:


/**
 * AssetsSoApp用于so文件运行时动态加载,加载目录为assets/so/
 * 
 * 用法:
 * 
 * 1、将原来libs/目录下的  armeabi、x86、 armeabi-v7a...,直接剪切至assets/so/目录下即可。
 * 2、将AndroidManifest.xml中的application设置为:  <application android:name="sc.tool.so.AssetsSoApp">;
 * 或者 调用 AssetsSoApp.LoadAssetsSo(this);
 * 
 * 注解: lib/目录下的so文件,在应用安装时就会输出,时常会报错导致应用无法正常安装。
 * {
 * 如:
 * 1、Google Play Store – Can’t install app (Error code: -504)
 * 2、is not page-aligned - will not be able to open it directly from apk
 * 3、Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2] 

Failure copying native libraries [errorCode=-2]

Commit of session 1430937614 failed: Failed to extract native libraries, res=-2


 * (此报错修改 aplication属性可以为 android:extractNativeLibs="true"编译的apk可正常运行,可从google play下载却无法安装,还是报第2个错误,
 * 干脆修改为so动态加载,就不会报错了,也可正常安装、运行)
 * }
 * 
 * 修复原理: so不添加至lib目录,不在应用安装时输出,正常安装。应用运行时,输出对应类型的so库,从该目录下动态加载
 * 
 * @author scimence@163.com
 */

应用安装目录:(若so存放在lib目录下,则在安装apk时,会自动输出)

 

自定义动态载入目录:(so不存放存到lib目录下,在运行时,输出至该目录,从此处载入)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值