X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fandroidtools.cpp;h=1633b8b6465dd575acd0676536969a7b9d027af1;hb=82c7d6187fdaeaa1b9cfbd6637d9b047a78f17ec;hp=5ef2bec5f23b40ec3ff31a58be99d3d1189ece0e;hpb=fefa7d1e8ac40136b690e305ce9594af95c678b8;p=builder.git diff --git a/source/androidtools.cpp b/source/androidtools.cpp index 5ef2bec..1633b8b 100644 --- a/source/androidtools.cpp +++ b/source/androidtools.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -53,13 +54,20 @@ AndroidDevKit::AndroidDevKit(Builder &b, const string &type, const FS::Path &def return; builder.get_logger().log("files", format("Traversing %s", platforms_dir.str())); + supported_api_levels = 0; for(const string &p: list_filtered(platforms_dir, "^android-[1-9][0-9]*$")) - supported_api_levels.insert(lexical_cast(p.substr(8))); + { + unsigned api = lexical_cast(p.substr(8)); + if(api>63) + builder.get_logger().log("problems", format("API level %d is too high", api)); + else + supported_api_levels |= 1< &sdk_api_levels = sdk.get_supported_api_levels(); - const set &ndk_api_levels = ndk.get_supported_api_levels(); - unsigned highest_common = 0; - for(auto i=sdk_api_levels.rbegin(); (!highest_common && i!=sdk_api_levels.rend()); ++i) - if(ndk_api_levels.count(*i)) - highest_common = *i; - - if(highest_common) + if(uint64_t common_api_levels = sdk.get_supported_api_levels()&ndk.get_supported_api_levels()) { - sdk.select_api_level(highest_common); - ndk.select_api_level(highest_common); + unsigned api = 0; + for(unsigned i=32; i>0; i>>=1) + api += i*!!(common_api_levels>>(api+i)); + builder.get_logger().log("tools", format("Using Android API level %d", api)); + sdk.select_api_level(api); + ndk.select_api_level(api); } else builder.get_logger().log("problems", "No usable Android platforms found");