+#include <msp/core/algorithm.h>
#include <msp/fs/utils.h>
+#include <msp/strings/format.h>
#include "androidapplicationcomponent.h"
#include "androidmanifestfile.h"
#include "androidresourcefile.h"
using namespace std;
using namespace Msp;
-AndroidApplicationComponent::AndroidApplicationComponent(SourcePackage &p, const string &n):
- Component(p, n)
-{ }
-
void AndroidApplicationComponent::create_targets() const
{
Builder &builder = package.get_builder();
BuildGraph &build_graph = builder.get_build_graph();
- const BuildGraph::TargetMap &targets = build_graph.get_targets();
- list<Target *> contents;
- for(BuildGraph::TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
- if(i->second->get_package()==&package)
- if(InstalledFile *inst = dynamic_cast<InstalledFile *>(i->second))
+ vector<Target *> contents;
+ for(const auto &kvp: build_graph.get_targets())
+ if(kvp.second->get_package()==&package)
+ if(InstalledFile *inst = dynamic_cast<InstalledFile *>(kvp.second))
contents.push_back(inst->get_real_target());
AndroidManifestFile *manifest = new AndroidManifestFile(builder, *this);
manifest->set_orientation(orientation);
- for(set<string>::const_iterator i=permissions.begin(); i!=permissions.end(); ++i)
- manifest->add_permission(*i);
+ for(const string &p: permissions)
+ manifest->add_permission(p);
- list<Target *> resource_sources;
+ vector<Target *> resource_sources;
resource_sources.push_back(manifest);
const Toolchain &toolchain = builder.get_toolchain();
Tool © = toolchain.get_tool("CP");
- SourceList source_filenames = collect_source_files();
- for(SourceList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
+ for(const FS::Path &s: collect_source_files())
{
- Target *tgt = new AndroidResourceFile(builder, *this, *i);
+ Target *tgt = new AndroidResourceFile(builder, *this, s);
resource_sources.push_back(copy.create_target(*tgt, "//"));
}
Tool &aapt = toolchain.get_tool("AAPT");
Target *resource_bundle = aapt.create_target(resource_sources);
- list<Target *> apk_sources;
+ vector<Target *> apk_sources;
+ apk_sources.reserve(1+contents.size());
apk_sources.push_back(resource_bundle);
const Architecture &arch = package.get_builder().get_current_arch();
- string lib_dir = "//"+name+"/lib/";
+ string lib_dir = format("//%s/lib/", name);
if(arch.get_type()=="arm")
{
lib_dir += "armeabi";
else
lib_dir += arch.get_type();
- string assets_dir = "//"+name+"/assets";
- for(list<Target *>::const_iterator i=contents.begin(); i!=contents.end(); ++i)
+ string assets_dir = format("//%s/assets", name);
+ for(Target *t: contents)
{
Target *staged = 0;
- if(SharedLibrary *shlib = dynamic_cast<SharedLibrary *>(*i))
+ if(SharedLibrary *shlib = dynamic_cast<SharedLibrary *>(t))
{
manifest->set_native_library(shlib);
- staged = copy.create_target(**i, lib_dir);
+ staged = copy.create_target(*t, lib_dir);
}
else
- staged = copy.create_target(**i, assets_dir);
+ staged = copy.create_target(*t, assets_dir);
apk_sources.push_back(staged);
}
void AndroidApplicationComponent::Loader::permission(const string &perm)
{
- obj.permissions.insert(perm);
+ if(!any_equals(obj.permissions, perm))
+ obj.permissions.push_back(perm);
}