这几天做项目时遇到一个问题,共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
上面部分我试过之后是可行的,希望能帮到大家。
时间: 2024-11-04 07:53:55