m_Permission = ""; return; } posbegin = str.find(softName); if (posbegin == string::npos) m_softName = ""; else { posbegin = posbegin + softName.size(); posend = str.find('\'', posbegin); m_softName.assign(str, posbegin, posend-posbegin); //获取APK 的软件 对外显示名称 } posbegin = str.find(pkgName); if (posbegin == string::npos) m_PkgName = ""; else { posbegin = posbegin + pkgName.size(); posend = str.find('\'', posbegin); m_PkgName.assign(str, posbegin, posend-posbegin); //获取 APK 的软件 包名称 } ...... ...... HANDLE hApk = CreateFile(m_apkName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if(hApk == INVALID_HANDLE_VALUE) m_FileSize = ""; else { DWORD dwSize = GetFileSize(hApk, NULL); DOUBLE fSize = 0; string strend = ""; if (dwSize >= 1024*1024) { fSize = dwSize * 1.0 / 1024 / 1024; strend = "MB"; } else if (dwSize >= 1024) { fSize = dwSize * 1.0 / 1024; strend = "KB"; } else { fSize = dwSize; strend = "字节"; } char buf[16] = {0}; m_FileSize = _gcvt(fSize, 3, buf); m_FileSize += strend; CloseHandle(hApk); } posbegin = str.find(iconfile); if (posbegin == string::npos) m_OSVersion = ""; else { posbegin = posbegin + iconfile.size(); posend = str.find('\'', posbegin); m_iconFile.assign(str, posbegin, posend-posbegin); } } 使用string类的find方法对特征字符串进行查找,特征字符串在上面讲解ADB与AAPT 时有用到,它们分别是: const string errorstr = "ERROR: dump failed"; const string appName = "application: label='"; const string pkgName = "package: name='"; const string version = "versionName='"; const string osversion = "sdkVersion:'"; const string permission = "uses-permission:'"; const string iconfile = "icon='"; const string devices = "List of devices attached"; 如果找到相应的特征字符串就提取相应的值并设置相应的成员变量,反之则设为空。权 限字符串的处理是比较麻烦的,查找permission 会返回一系列以 "uses-permission:'"打 头的字符串,而我们程序需要显示的是权限的描述,为此,我将这些权限与之对应的描述创 建到了一个STL的 Map 对象中,map<string,string> m_mapPermission,而初始化的操作封 装到了 InitPermissionMap()中,代码如下: void CAPKHelper::InitPermissionMap() { m_mapPermission.clear(); m_mapPermission.insert(pair<string,string>("android.permission.ACCESS_COARS E_LOCATION","允许获取粗略的位置信息")); m_mapPermission.insert(pair<string,string>("android.permission.ACCESS_FINE_ LOCATION","允许访问GPS")); ...... ...... m_mapPermission.insert(pair<string,string>("android.permission.ACCESS_MOCK_ LOCATION","获取模拟定位信息")); m_mapPermission.insert(pair<string,string>("android.permission.CHANGE_COMPO NENT_ENABLED_STATE","改变组件启用状态")); |