缩小ndk库的大小
搞了个sdk的native层, 也就简单几行jni调用, 读取文件,加载类啥的. 编译完发现居然有370多k. 作为一个游戏的sdk, 人家游戏都才几M, 一个sdk要400k, 怎么能忍
google了下, 找到这个文章: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;
}
再编译, 库的大小缩小到了97k