在开写之前,可以先看下这篇文章:
Android NDK 如何缩减库的大小iostream 会大幅增加大小,查了下代码, 只有读取文件这一个功能有用到iostream,以下面代码为例
void * FileUtils::readFileData(const std::string & filename, ssize_t * size) {
std::ifstream in (filename, std::ifstream::ate | std::ifstream::binary);
if (! in .is_open()) {
throw std::runtime_error("file " + filename + " open error");
}
int fileSize = in .tellg();
void * data = malloc(fileSize); in .seekg(0, std::ifstream::beg); in .read((char * ) data, fileSize); in .close();
if (size) { *
size = fileSize;
}
return data;
}
代码改为:
void * FileUtils::readFileData(const std::string & filename, ssize_t * size) {
FILE * file = fopen(filename.c_str(), "rb");
if (!file) {
throw std::runtime_error("file " + filename + " open error");
}
struct stat info;
if (stat(filename.c_str(), & info) != 0)
throw std::runtime_error("get " + filename + " stat error");
int fileSize = info.st_size;
void * data = malloc(fileSize);
fread(data, sizeof(void), fileSize, file);
fclose(file);
if (size) { *
size = fileSize;
}
return data;
}
最后生成的.so文件将缩小300KB
本文链接:https://it72.com/9272.htm