zoukankan      html  css  js  c++  java
  • Android 网络加载动态库 .so

      这几天做项目时遇到一个问题,共17M的Apk,仅两个.so文件就占到14M,就尝试着用户安装完app之后,根据用户需要再加载.so文件,找了之后,方法倒不复杂。

      1. .so文件的网络下载部分就不展示,

      2. .so文件存放路径:一般建议存放在 data/data/<packageName>/路径下,代码如下:

        //getFileDir() :/data/data/<packageName>/file/
        File file2 = new File(getFilesDir(), "libBankeysCoreApi.so");
        try {
                //fos = openFileOutput("libBankeysCoreApi.so", Context.MODE_PRIVATE); //第一个参数:文件名,不允许包含分隔符“/”,如果文件不存在,android会自动创建
                                                                //第二个参数:指定操作模式 
                                        //有网友推荐这样使用,但试过之后会保存,提示 "/data/data/<packageName>/app_" 是个路径的错误
    //我放弃这个办法
    fos = new FileOutputStream(file2.getAbsoluteFile()); fos.write(b); fos.close(); Log.e("TAG", "" + true + ";" + file2.getAbsolutePath()); } catch (FileNotFoundException e) { e.printStackTrace(); Log.e("TAG", e.getMessage()); } catch (IOException e) { e.printStackTrace(); Log.e("TAG", e.getMessage()); } System.load(file2.getAbsolutePath());

      另外:lib下库一般会在/data/data/<packageName>/lib/下备份,调用方法做个改动,如下:

    System.loadLibrary("");

     另,附上:

    getPackageCodePath():/data/app/com.example.download.sotest-2.apk
    getFilesDir():/data/data/com.example.download.sotest/files
    getPackageResourcePath():/data/app/com.example.download.sotest-2.apk
    getCacheDir():/data/data/com.example.download.sotest/cache
    getExternalCacheDir():/storage/emulated/0/Android/data/com.example.download.sotest/cache
    getObbDir():/storage/emulated/0/Android/obb/com.example.download.sotest
    getFilesDir():/data/data/com.example.download.sotest/files

    上面部分我试过之后是可行的,希望能帮到大家。

  • 相关阅读:
    缩放图片
    Volley下载图片存放在data/data下 networkImageView lrucache
    类实现Parcelable接口在Intent中传递
    基本控件设置边角图片 drawableleft
    屏幕全屏之类的问题
    关于点击按钮分享
    万能适配器的一些问题
    自定义控件高级
    Fragment 生命周期 全局变量的声明位置
    GridView
  • 原文地址:https://www.cnblogs.com/ZhangXiangQian/p/4900209.html
Copyright © 2011-2022 走看看