1 #include <msp/fs/utils.h>
2 #include "androidapplicationcomponent.h"
3 #include "androidmanifestfile.h"
4 #include "androidresourcefile.h"
6 #include "installedfile.h"
7 #include "sharedlibrary.h"
8 #include "sourcepackage.h"
10 #include "toolchain.h"
15 AndroidApplicationComponent::AndroidApplicationComponent(SourcePackage &p, const string &n):
19 void AndroidApplicationComponent::create_targets() const
21 Builder &builder = package.get_builder();
22 BuildGraph &build_graph = builder.get_build_graph();
24 const BuildGraph::TargetMap &targets = build_graph.get_targets();
25 list<Target *> contents;
26 for(BuildGraph::TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
27 if(i->second->get_package()==&package)
28 if(InstalledFile *inst = dynamic_cast<InstalledFile *>(i->second))
29 contents.push_back(inst->get_real_target());
31 AndroidManifestFile *manifest = new AndroidManifestFile(builder, *this);
32 manifest->set_orientation(orientation);
33 for(set<string>::const_iterator i=permissions.begin(); i!=permissions.end(); ++i)
34 manifest->add_permission(*i);
36 list<Target *> resource_sources;
37 resource_sources.push_back(manifest);
39 const Toolchain &toolchain = builder.get_toolchain();
40 Tool © = toolchain.get_tool("CP");
41 SourceList source_filenames = collect_source_files();
42 for(SourceList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
44 Target *tgt = new AndroidResourceFile(builder, *this, *i);
45 resource_sources.push_back(copy.create_target(*tgt, "//"));
48 Tool &aapt = toolchain.get_tool("AAPT");
49 Target *resource_bundle = aapt.create_target(resource_sources);
51 list<Target *> apk_sources;
52 apk_sources.push_back(resource_bundle);
54 const Architecture &arch = package.get_builder().get_current_arch();
55 string lib_dir = "//"+name+"/lib/";
56 if(arch.get_type()=="arm")
59 if(arch.get_cpu()=="armv7a")
63 lib_dir += arch.get_type();
65 string assets_dir = "//"+name+"/assets";
66 for(list<Target *>::const_iterator i=contents.begin(); i!=contents.end(); ++i)
69 if(SharedLibrary *shlib = dynamic_cast<SharedLibrary *>(*i))
71 manifest->set_native_library(shlib);
72 staged = copy.create_target(**i, lib_dir);
75 staged = copy.create_target(**i, assets_dir);
76 apk_sources.push_back(staged);
79 Tool &apk_builder = toolchain.get_tool("APK");
80 Target *apk = apk_builder.create_target(apk_sources);
81 builder.get_build_graph().add_primary_target(*apk);
85 AndroidApplicationComponent::Loader::Loader(AndroidApplicationComponent &c):
86 DataFile::DerivedObjectLoader<AndroidApplicationComponent, Component::Loader>(c)
88 add("orientation", &AndroidApplicationComponent::orientation);
89 add("permission", &Loader::permission);
92 void AndroidApplicationComponent::Loader::permission(const string &perm)
94 obj.permissions.insert(perm);