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

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

posted @ 2015-10-22 11:17  还没好好感受年轻  阅读(1172)  评论(0编辑  收藏  举报