缩小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