android的路径问题,谈谈Android App运行时文件系统路径问题

在我们所的程序的执行过程中,涉及到文件IO及动态库加载的时候,我们需要和App相关的一些路径打交道

假如我们的App的全名为com.example.appname;

App的工作目录,多数机器上为/data/data/com.example.appname/files

对于使用了原生代码的App,.so 目录的存储路径一般为/data/app-lib/com.example.appname;

我在一个第三方跨平台库中看到了这样的实现:

#if XN_PLATFORM == XN_PLATFORM_ANDROID_ARM

static void getApplicationName(XnChar* strAppName, const XnUInt32 nBufferSize)

{

FILE *pFile;

size_t length;

pFile = fopen("/proc/self/cmdline", "r");

length = fread(strAppName, 1, nBufferSize, pFile);

fclose(pFile);

}

XN_C_API XnStatus XN_C_DECL xnOSGetApplicationFilesDir(XnChar* cpDirName, const XnUInt32 nBufferSize)

{

char strAppName[1024];

getApplicationName(strAppName, sizeof(strAppName));

snprintf(cpDirName, nBufferSize, "/data/data/%s/files/", strAppName);

return (XN_STATUS_OK);

}

XN_C_API XnStatus XN_C_DECL xnOSGetApplicationLibDir(XnChar* cpDirName, const XnUInt32 nBufferSize)

{

char strAppName[1024];

getApplicationName(strAppName, sizeof(strAppName));

snprintf(cpDirName, nBufferSize, "/data/data/%s/lib/", strAppName);

return (XN_STATUS_OK);

}

#endif

这段代码的实现皆是按照我上面所述的情况来实现的,即以App的全名为参照,来确定我们要找的路径。

可就是这段代码才导致我的App无法运行。

原来,在我的手机 小米3 Android4.4.4 上,App的物理文件名有时会多出一个后缀,比如:com.example.appname-1.apk;

而App的库文件路径也是根据这个名称来的,/data/app-lib/com.example.appname-1;

而函数getApplicationName通过读取"/proc/self/cmdline"得带的App名称却是逻辑文件名com.example.appname,

这就导致xnOSGetApplicationLibDir函数始终无法找到正确的库目录,就导致库的动态加载失败。

这是否是所谓的定制系统带来的问题?



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值