AAPT support for feature splits
This change allows the developer to add a base package for which to build a feature split. The generated resource types will begin after the base APK's defined types so as not to collide or override resources. Multiple features can be generated by first choosing an arbitrary order for the features. Then for each feature, the base APK and any preceding features are specified with the --feature-of flags. So with a base APK 'A' and features, 'B', and 'C', 'B' would be built with aapt package [...] --feature-of A [...] and 'C' would be built with aapt package [...] --feature-of A --feature-of B [...] Change-Id: I1be66e3f8df9a737b21c71f8a93685376c7e6780
This commit is contained in:
@@ -1684,6 +1684,8 @@ public:
|
||||
public:
|
||||
inline virtual ~Accessor() { }
|
||||
|
||||
virtual const String16& getAssetsPackage() const = 0;
|
||||
|
||||
virtual uint32_t getCustomResource(const String16& package,
|
||||
const String16& type,
|
||||
const String16& name) const = 0;
|
||||
|
||||
@@ -4630,11 +4630,13 @@ bool ResTable::stringToValue(Res_value* outValue, String16* outString,
|
||||
type.size(), package.string(), package.size(), &specFlags);
|
||||
if (rid != 0) {
|
||||
if (enforcePrivate) {
|
||||
if ((specFlags&ResTable_typeSpec::SPEC_PUBLIC) == 0) {
|
||||
if (accessor != NULL) {
|
||||
accessor->reportError(accessorCookie, "Resource is not public.");
|
||||
if (accessor == NULL || accessor->getAssetsPackage() != package) {
|
||||
if ((specFlags&ResTable_typeSpec::SPEC_PUBLIC) == 0) {
|
||||
if (accessor != NULL) {
|
||||
accessor->reportError(accessorCookie, "Resource is not public.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <utils/String8.h>
|
||||
#include <utils/String16.h>
|
||||
#include "TestHelpers.h"
|
||||
#include "data/R.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
@@ -43,16 +44,6 @@ namespace {
|
||||
|
||||
enum { MAY_NOT_BE_BAG = false };
|
||||
|
||||
static const uint32_t attr_attr1 = 0x7f010000;
|
||||
static const uint32_t attr_attr2 = 0x7f010001;
|
||||
static const uint32_t string_test1 = 0x7f020000;
|
||||
static const uint32_t string_test2 = 0x7f020001;
|
||||
static const uint32_t integer_number1 = 0x7f030000;
|
||||
static const uint32_t integer_number2 = 0x7f030001;
|
||||
static const uint32_t style_Theme1 = 0x7f040000;
|
||||
static const uint32_t style_Theme2 = 0x7f040001;
|
||||
static const uint32_t array_integerArray1 = 0x7f050000;
|
||||
|
||||
class IdmapTest : public ::testing::Test {
|
||||
protected:
|
||||
virtual void SetUp() {
|
||||
@@ -79,7 +70,7 @@ TEST_F(IdmapTest, canLoadIdmap) {
|
||||
|
||||
TEST_F(IdmapTest, overlayOverridesResourceValue) {
|
||||
Res_value val;
|
||||
ssize_t block = mTargetTable.getResource(string_test2, &val, false);
|
||||
ssize_t block = mTargetTable.getResource(R::string::test2, &val, false);
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_STRING, val.dataType);
|
||||
const ResStringPool* pool = mTargetTable.getTableStringBlock(block);
|
||||
@@ -93,7 +84,7 @@ TEST_F(IdmapTest, overlayOverridesResourceValue) {
|
||||
|
||||
ASSERT_EQ(NO_ERROR, mTargetTable.add(overlay_arsc, overlay_arsc_len, mData, mDataSize));
|
||||
|
||||
ssize_t newBlock = mTargetTable.getResource(string_test2, &val, false);
|
||||
ssize_t newBlock = mTargetTable.getResource(R::string::test2, &val, false);
|
||||
ASSERT_GE(newBlock, 0);
|
||||
ASSERT_NE(block, newBlock);
|
||||
ASSERT_EQ(Res_value::TYPE_STRING, val.dataType);
|
||||
@@ -110,7 +101,7 @@ TEST_F(IdmapTest, overlaidResourceHasSameName) {
|
||||
ASSERT_EQ(NO_ERROR, mTargetTable.add(overlay_arsc, overlay_arsc_len, mData, mDataSize));
|
||||
|
||||
ResTable::resource_name resName;
|
||||
ASSERT_TRUE(mTargetTable.getResourceName(array_integerArray1, false, &resName));
|
||||
ASSERT_TRUE(mTargetTable.getResourceName(R::array::integerArray1, false, &resName));
|
||||
|
||||
ASSERT_TRUE(resName.package != NULL);
|
||||
ASSERT_TRUE(resName.type != NULL);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <utils/String8.h>
|
||||
#include <utils/String16.h>
|
||||
#include "TestHelpers.h"
|
||||
#include "data/R.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
@@ -35,16 +36,6 @@ namespace {
|
||||
|
||||
enum { MAY_NOT_BE_BAG = false };
|
||||
|
||||
static const uint32_t attr_attr1 = 0x7f010000;
|
||||
static const uint32_t attr_attr2 = 0x7f010001;
|
||||
static const uint32_t string_test1 = 0x7f020000;
|
||||
static const uint32_t string_test2 = 0x7f020001;
|
||||
static const uint32_t integer_number1 = 0x7f030000;
|
||||
static const uint32_t integer_number2 = 0x7f030001;
|
||||
static const uint32_t style_Theme1 = 0x7f040000;
|
||||
static const uint32_t style_Theme2 = 0x7f040001;
|
||||
static const uint32_t array_integerArray1 = 0x7f050000;
|
||||
|
||||
TEST(ResTableTest, shouldLoadSuccessfully) {
|
||||
ResTable table;
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
@@ -55,7 +46,7 @@ TEST(ResTableTest, simpleTypeIsRetrievedCorrectly) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
ssize_t block = table.getResource(string_test1, &val, MAY_NOT_BE_BAG);
|
||||
ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG);
|
||||
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_STRING, val.dataType);
|
||||
@@ -75,7 +66,7 @@ TEST(ResTableTest, resourceNameIsResolved) {
|
||||
0, 0,
|
||||
defPackage.string(), defPackage.size());
|
||||
ASSERT_NE(uint32_t(0x00000000), resID);
|
||||
ASSERT_EQ(string_test1, resID);
|
||||
ASSERT_EQ(R::string::test1, resID);
|
||||
}
|
||||
|
||||
TEST(ResTableTest, noParentThemeIsAppliedCorrectly) {
|
||||
@@ -83,19 +74,19 @@ TEST(ResTableTest, noParentThemeIsAppliedCorrectly) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
ResTable::Theme theme(table);
|
||||
ASSERT_EQ(NO_ERROR, theme.applyStyle(style_Theme1));
|
||||
ASSERT_EQ(NO_ERROR, theme.applyStyle(R::style::Theme1));
|
||||
|
||||
Res_value val;
|
||||
uint32_t specFlags = 0;
|
||||
ssize_t index = theme.getAttribute(attr_attr1, &val, &specFlags);
|
||||
ssize_t index = theme.getAttribute(R::attr::attr1, &val, &specFlags);
|
||||
ASSERT_GE(index, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_INT_DEC, val.dataType);
|
||||
ASSERT_EQ(uint32_t(100), val.data);
|
||||
|
||||
index = theme.getAttribute(attr_attr2, &val, &specFlags);
|
||||
index = theme.getAttribute(R::attr::attr2, &val, &specFlags);
|
||||
ASSERT_GE(index, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_REFERENCE, val.dataType);
|
||||
ASSERT_EQ(integer_number1, val.data);
|
||||
ASSERT_EQ(R::integer::number1, val.data);
|
||||
}
|
||||
|
||||
TEST(ResTableTest, parentThemeIsAppliedCorrectly) {
|
||||
@@ -103,19 +94,19 @@ TEST(ResTableTest, parentThemeIsAppliedCorrectly) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
ResTable::Theme theme(table);
|
||||
ASSERT_EQ(NO_ERROR, theme.applyStyle(style_Theme2));
|
||||
ASSERT_EQ(NO_ERROR, theme.applyStyle(R::style::Theme2));
|
||||
|
||||
Res_value val;
|
||||
uint32_t specFlags = 0;
|
||||
ssize_t index = theme.getAttribute(attr_attr1, &val, &specFlags);
|
||||
ssize_t index = theme.getAttribute(R::attr::attr1, &val, &specFlags);
|
||||
ASSERT_GE(index, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_INT_DEC, val.dataType);
|
||||
ASSERT_EQ(uint32_t(300), val.data);
|
||||
|
||||
index = theme.getAttribute(attr_attr2, &val, &specFlags);
|
||||
index = theme.getAttribute(R::attr::attr2, &val, &specFlags);
|
||||
ASSERT_GE(index, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_REFERENCE, val.dataType);
|
||||
ASSERT_EQ(integer_number1, val.data);
|
||||
ASSERT_EQ(R::integer::number1, val.data);
|
||||
}
|
||||
|
||||
TEST(ResTableTest, referenceToBagIsNotResolved) {
|
||||
@@ -123,15 +114,15 @@ TEST(ResTableTest, referenceToBagIsNotResolved) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
ssize_t block = table.getResource(integer_number2, &val, MAY_NOT_BE_BAG);
|
||||
ssize_t block = table.getResource(R::integer::number2, &val, MAY_NOT_BE_BAG);
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_REFERENCE, val.dataType);
|
||||
ASSERT_EQ(array_integerArray1, val.data);
|
||||
ASSERT_EQ(R::array::integerArray1, val.data);
|
||||
|
||||
ssize_t newBlock = table.resolveReference(&val, block);
|
||||
EXPECT_EQ(block, newBlock);
|
||||
EXPECT_EQ(Res_value::TYPE_REFERENCE, val.dataType);
|
||||
EXPECT_EQ(array_integerArray1, val.data);
|
||||
EXPECT_EQ(R::array::integerArray1, val.data);
|
||||
}
|
||||
|
||||
TEST(ResTableTest, resourcesStillAccessibleAfterParameterChange) {
|
||||
@@ -139,12 +130,12 @@ TEST(ResTableTest, resourcesStillAccessibleAfterParameterChange) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
ssize_t block = table.getResource(integer_number1, &val, MAY_NOT_BE_BAG);
|
||||
ssize_t block = table.getResource(R::integer::number1, &val, MAY_NOT_BE_BAG);
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_INT_DEC, val.dataType);
|
||||
|
||||
const ResTable::bag_entry* entry;
|
||||
ssize_t count = table.lockBag(array_integerArray1, &entry);
|
||||
ssize_t count = table.lockBag(R::array::integerArray1, &entry);
|
||||
ASSERT_GE(count, 0);
|
||||
table.unlockBag(entry);
|
||||
|
||||
@@ -153,11 +144,11 @@ TEST(ResTableTest, resourcesStillAccessibleAfterParameterChange) {
|
||||
param.density = 320;
|
||||
table.setParameters(¶m);
|
||||
|
||||
block = table.getResource(integer_number1, &val, MAY_NOT_BE_BAG);
|
||||
block = table.getResource(R::integer::number1, &val, MAY_NOT_BE_BAG);
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_INT_DEC, val.dataType);
|
||||
|
||||
count = table.lockBag(array_integerArray1, &entry);
|
||||
count = table.lockBag(R::array::integerArray1, &entry);
|
||||
ASSERT_GE(count, 0);
|
||||
table.unlockBag(entry);
|
||||
}
|
||||
@@ -167,7 +158,7 @@ TEST(ResTableTest, resourceIsOverridenWithBetterConfig) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
ssize_t block = table.getResource(integer_number1, &val, MAY_NOT_BE_BAG);
|
||||
ssize_t block = table.getResource(R::integer::number1, &val, MAY_NOT_BE_BAG);
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_INT_DEC, val.dataType);
|
||||
ASSERT_EQ(uint32_t(200), val.data);
|
||||
@@ -180,7 +171,7 @@ TEST(ResTableTest, resourceIsOverridenWithBetterConfig) {
|
||||
param.country[1] = 'E';
|
||||
table.setParameters(¶m);
|
||||
|
||||
block = table.getResource(integer_number1, &val, MAY_NOT_BE_BAG);
|
||||
block = table.getResource(R::integer::number1, &val, MAY_NOT_BE_BAG);
|
||||
ASSERT_GE(block, 0);
|
||||
ASSERT_EQ(Res_value::TYPE_INT_DEC, val.dataType);
|
||||
ASSERT_EQ(uint32_t(400), val.data);
|
||||
|
||||
@@ -19,46 +19,37 @@
|
||||
#include <utils/String8.h>
|
||||
#include <utils/String16.h>
|
||||
#include "TestHelpers.h"
|
||||
#include "data/R.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
using namespace android;
|
||||
|
||||
namespace {
|
||||
|
||||
/**
|
||||
* Include a binary resource table. This table
|
||||
* is a base table for an APK split.
|
||||
*
|
||||
* Package: com.android.example.split
|
||||
*
|
||||
* layout/main 0x7f020000 {default, fr-sw600dp-v13}
|
||||
*
|
||||
* string/app_title 0x7f030000 {default}
|
||||
* string/test 0x7f030001 {default}
|
||||
* string/boom 0x7f030002 {default}
|
||||
* string/blah 0x7f030003 {default}
|
||||
*
|
||||
* array/lotsofstrings 0x7f040000 {default}
|
||||
* array/numList 0x7f040001 {default}
|
||||
* array/ary 0x7f040002 {default}
|
||||
*
|
||||
* Package: com.android.test.basic
|
||||
*/
|
||||
#include "data/split_base_arsc.h"
|
||||
#include "data/basic/basic_arsc.h"
|
||||
|
||||
/**
|
||||
* Include a binary resource table. This table
|
||||
* is a configuration split table for an APK split.
|
||||
*
|
||||
* Package: com.android.example.split
|
||||
*
|
||||
* string/app_title 0x7f030000 {fr}
|
||||
* string/test 0x7f030001 {de,fr}
|
||||
* string/blah 0x7f030003 {fr}
|
||||
*
|
||||
* array/lotsofstrings 0x7f040000 {fr}
|
||||
*
|
||||
* Package: com.android.test.basic
|
||||
*/
|
||||
#include "data/split_de_fr_arsc.h"
|
||||
#include "data/basic/split_de_fr_arsc.h"
|
||||
|
||||
|
||||
using namespace android;
|
||||
/**
|
||||
* Include a binary resource table. This table
|
||||
* is a feature split table for an APK split.
|
||||
*
|
||||
* Package: com.android.test.basic
|
||||
*/
|
||||
#include "data/feature/feature_arsc.h"
|
||||
|
||||
enum { MAY_NOT_BE_BAG = false };
|
||||
|
||||
@@ -70,7 +61,7 @@ void makeConfigFrench(ResTable_config* config) {
|
||||
|
||||
TEST(SplitTest, TestLoadBase) {
|
||||
ResTable table;
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_base_arsc, split_base_arsc_len));
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
}
|
||||
|
||||
TEST(SplitTest, TestGetResourceFromBase) {
|
||||
@@ -80,14 +71,14 @@ TEST(SplitTest, TestGetResourceFromBase) {
|
||||
ResTable table;
|
||||
table.setParameters(&frenchConfig);
|
||||
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_base_arsc, split_base_arsc_len));
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
ResTable_config expectedConfig;
|
||||
memset(&expectedConfig, 0, sizeof(expectedConfig));
|
||||
|
||||
Res_value val;
|
||||
ResTable_config config;
|
||||
ssize_t block = table.getResource(0x7f030000, &val, MAY_NOT_BE_BAG, 0, NULL, &config);
|
||||
ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, NULL, &config);
|
||||
|
||||
// The returned block should tell us which string pool to get the value, if it is a string.
|
||||
EXPECT_GE(block, 0);
|
||||
@@ -105,12 +96,12 @@ TEST(SplitTest, TestGetResourceFromSplit) {
|
||||
ResTable table;
|
||||
table.setParameters(&expectedConfig);
|
||||
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_base_arsc, split_base_arsc_len));
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_de_fr_arsc, split_de_fr_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
ResTable_config config;
|
||||
ssize_t block = table.getResource(0x7f030000, &val, MAY_NOT_BE_BAG, 0, NULL, &config);
|
||||
ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, NULL, &config);
|
||||
|
||||
EXPECT_GE(block, 0);
|
||||
|
||||
@@ -126,15 +117,15 @@ TEST(SplitTest, ResourcesFromBaseAndSplitHaveSameNames) {
|
||||
ResTable table;
|
||||
table.setParameters(&expectedConfig);
|
||||
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_base_arsc, split_base_arsc_len));
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
ResTable::resource_name baseName;
|
||||
EXPECT_TRUE(table.getResourceName(0x7f030003, false, &baseName));
|
||||
EXPECT_TRUE(table.getResourceName(R::string::test1, false, &baseName));
|
||||
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_de_fr_arsc, split_de_fr_arsc_len));
|
||||
|
||||
ResTable::resource_name frName;
|
||||
EXPECT_TRUE(table.getResourceName(0x7f030003, false, &frName));
|
||||
EXPECT_TRUE(table.getResourceName(R::string::test1, false, &frName));
|
||||
|
||||
EXPECT_EQ(
|
||||
String16(baseName.package, baseName.packageLen),
|
||||
@@ -154,11 +145,11 @@ TEST(SplitTest, TypeEntrySpecFlagsAreUpdated) {
|
||||
memset(&defaultConfig, 0, sizeof(defaultConfig));
|
||||
|
||||
ResTable table;
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_base_arsc, split_base_arsc_len));
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
uint32_t specFlags = 0;
|
||||
ssize_t block = table.getResource(0x7f030000, &val, MAY_NOT_BE_BAG, 0, &specFlags, NULL);
|
||||
ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, &specFlags, NULL);
|
||||
EXPECT_GE(block, 0);
|
||||
|
||||
EXPECT_EQ(static_cast<uint32_t>(0), specFlags);
|
||||
@@ -166,8 +157,47 @@ TEST(SplitTest, TypeEntrySpecFlagsAreUpdated) {
|
||||
ASSERT_EQ(NO_ERROR, table.add(split_de_fr_arsc, split_de_fr_arsc_len));
|
||||
|
||||
uint32_t frSpecFlags = 0;
|
||||
block = table.getResource(0x7f030000, &val, MAY_NOT_BE_BAG, 0, &frSpecFlags, NULL);
|
||||
block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, &frSpecFlags, NULL);
|
||||
EXPECT_GE(block, 0);
|
||||
|
||||
EXPECT_EQ(ResTable_config::CONFIG_LOCALE, frSpecFlags);
|
||||
}
|
||||
|
||||
TEST(SplitFeatureTest, TestNewResourceIsAccessible) {
|
||||
ResTable table;
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
Res_value val;
|
||||
ssize_t block = table.getResource(R::string::test3, &val, MAY_NOT_BE_BAG);
|
||||
EXPECT_LT(block, 0);
|
||||
|
||||
ASSERT_EQ(NO_ERROR, table.add(feature_arsc, feature_arsc_len));
|
||||
|
||||
block = table.getResource(R::string::test3, &val, MAY_NOT_BE_BAG);
|
||||
EXPECT_GE(block, 0);
|
||||
|
||||
EXPECT_EQ(Res_value::TYPE_STRING, val.dataType);
|
||||
}
|
||||
|
||||
TEST(SplitFeatureTest, TestNewResourceIsAccessibleByName) {
|
||||
ResTable table;
|
||||
ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len));
|
||||
|
||||
ResTable::resource_name name;
|
||||
EXPECT_FALSE(table.getResourceName(R::string::test3, false, &name));
|
||||
|
||||
ASSERT_EQ(NO_ERROR, table.add(feature_arsc, feature_arsc_len));
|
||||
|
||||
EXPECT_TRUE(table.getResourceName(R::string::test3, false, &name));
|
||||
|
||||
EXPECT_EQ(String16("com.android.test.basic"),
|
||||
String16(name.package, name.packageLen));
|
||||
|
||||
EXPECT_EQ(String16("string"),
|
||||
String16(name.type, name.typeLen));
|
||||
|
||||
EXPECT_EQ(String16("test3"),
|
||||
String16(name.name, name.nameLen));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
53
libs/androidfw/tests/data/R.h
Normal file
53
libs/androidfw/tests/data/R.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#ifndef __R_H
|
||||
#define __R_H
|
||||
|
||||
namespace R {
|
||||
|
||||
namespace attr {
|
||||
enum {
|
||||
attr1 = 0x7f010000, // default
|
||||
attr2 = 0x7f010001, // default
|
||||
};
|
||||
}
|
||||
|
||||
namespace layout {
|
||||
enum {
|
||||
main = 0x7f020000, // default, fr-sw600dp-v13
|
||||
};
|
||||
}
|
||||
|
||||
namespace string {
|
||||
enum {
|
||||
test1 = 0x7f030000, // default
|
||||
test2 = 0x7f030001, // default
|
||||
|
||||
test3 = 0x7f070000, // default (in feature)
|
||||
test4 = 0x7f070001, // default (in feature)
|
||||
};
|
||||
}
|
||||
|
||||
namespace integer {
|
||||
enum {
|
||||
number1 = 0x7f040000, // default, sv
|
||||
number2 = 0x7f040001, // default
|
||||
|
||||
test3 = 0x7f080000, // default (in feature)
|
||||
};
|
||||
}
|
||||
|
||||
namespace style {
|
||||
enum {
|
||||
Theme1 = 0x7f050000, // default
|
||||
Theme2 = 0x7f050001, // default
|
||||
};
|
||||
}
|
||||
|
||||
namespace array {
|
||||
enum {
|
||||
integerArray1 = 0x7f060000, // default
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif // __R_H
|
||||
@@ -1,15 +1,26 @@
|
||||
unsigned char basic_arsc[] = {
|
||||
0x02, 0x00, 0x0c, 0x00, 0xfc, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
|
||||
0x02, 0x00, 0x0c, 0x00, 0x60, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
|
||||
0x72, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x00, 0x72, 0x00,
|
||||
0x65, 0x00, 0x73, 0x00, 0x2f, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x79, 0x00,
|
||||
0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x2f, 0x00, 0x6d, 0x00, 0x61, 0x00,
|
||||
0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x78, 0x00, 0x6d, 0x00, 0x6c, 0x00,
|
||||
0x00, 0x00, 0x22, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2f, 0x00,
|
||||
0x6c, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00,
|
||||
0x2d, 0x00, 0x66, 0x00, 0x72, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x77, 0x00,
|
||||
0x36, 0x00, 0x30, 0x00, 0x30, 0x00, 0x64, 0x00, 0x70, 0x00, 0x2d, 0x00,
|
||||
0x76, 0x00, 0x31, 0x00, 0x33, 0x00, 0x2f, 0x00, 0x6d, 0x00, 0x61, 0x00,
|
||||
0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x78, 0x00, 0x6d, 0x00, 0x6c, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x32, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x01, 0xb0, 0x05, 0x00, 0x00,
|
||||
0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2e, 0x00,
|
||||
0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x69, 0x00,
|
||||
0x64, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x2e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00,
|
||||
0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00,
|
||||
0x74, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x01,
|
||||
0x98, 0x06, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00,
|
||||
0x6d, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x72, 0x00,
|
||||
0x6f, 0x00, 0x69, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x65, 0x00,
|
||||
0x73, 0x00, 0x74, 0x00, 0x2e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00,
|
||||
0x69, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
@@ -27,105 +38,124 @@ unsigned char basic_arsc[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
|
||||
0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00,
|
||||
0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00,
|
||||
0x20, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00,
|
||||
0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00,
|
||||
0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00,
|
||||
0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 0x07, 0x00, 0x69, 0x00,
|
||||
0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6c, 0x00,
|
||||
0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00,
|
||||
0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00,
|
||||
0xdc, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xec, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x2a, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
|
||||
0x5c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x31, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00,
|
||||
0x32, 0x00, 0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00,
|
||||
0x74, 0x00, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00,
|
||||
0x73, 0x00, 0x74, 0x00, 0x32, 0x00, 0x00, 0x00, 0x07, 0x00, 0x6e, 0x00,
|
||||
0x75, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x31, 0x00,
|
||||
0x00, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x62, 0x00,
|
||||
0x65, 0x00, 0x72, 0x00, 0x32, 0x00, 0x00, 0x00, 0x06, 0x00, 0x54, 0x00,
|
||||
0x68, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x31, 0x00, 0x00, 0x00,
|
||||
0x28, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
|
||||
0x56, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
|
||||
0x88, 0x00, 0x00, 0x00, 0x05, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00,
|
||||
0x72, 0x00, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x61, 0x00, 0x74, 0x00,
|
||||
0x74, 0x00, 0x72, 0x00, 0x32, 0x00, 0x00, 0x00, 0x04, 0x00, 0x6d, 0x00,
|
||||
0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x74, 0x00,
|
||||
0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00,
|
||||
0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, 0x00,
|
||||
0x72, 0x00, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x75, 0x00,
|
||||
0x6d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x32, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x65, 0x00,
|
||||
0x32, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00,
|
||||
0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x41, 0x00, 0x72, 0x00,
|
||||
0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x84, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x08, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x10, 0xc8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x7f,
|
||||
0x01, 0x02, 0x44, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x73, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x10, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x90, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x08, 0x00, 0x00, 0x10,
|
||||
0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x7f, 0x08, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x03, 0x7f, 0x10, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7f,
|
||||
0x08, 0x00, 0x00, 0x10, 0x2c, 0x01, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||
0x31, 0x00, 0x00, 0x00, 0x06, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00,
|
||||
0x6d, 0x00, 0x65, 0x00, 0x32, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x69, 0x00,
|
||||
0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00,
|
||||
0x41, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x31, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x84, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x08, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02,
|
||||
0x08, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
|
||||
0x08, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x00
|
||||
0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x10,
|
||||
0x05, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x24, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x72, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10,
|
||||
0xc8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x7f, 0x01, 0x02, 0x44, 0x00,
|
||||
0x5c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x73, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10,
|
||||
0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x90, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x7f, 0x08, 0x00, 0x00, 0x10, 0x64, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x01, 0x7f, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x7f,
|
||||
0x10, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x7f,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x08, 0x00, 0x00, 0x10,
|
||||
0x2c, 0x01, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x10,
|
||||
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x10,
|
||||
0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x10,
|
||||
0x03, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned int basic_arsc_len = 1532;
|
||||
unsigned int basic_arsc_len = 1888;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
aapt package -M AndroidManifest.xml -S res -F bundle.apk -f && \
|
||||
aapt package -M AndroidManifest.xml -S res --split fr,de -F bundle.apk -f && \
|
||||
unzip bundle.apk resources.arsc && \
|
||||
mv resources.arsc basic.arsc && \
|
||||
xxd -i basic.arsc > basic_arsc.h
|
||||
xxd -i basic.arsc > basic_arsc.h && \
|
||||
unzip bundle_de_fr.apk resources.arsc && \
|
||||
mv resources.arsc split_de_fr.arsc && \
|
||||
xxd -i split_de_fr.arsc > split_de_fr_arsc.h
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge>
|
||||
</merge>
|
||||
3
libs/androidfw/tests/data/basic/res/layout/main.xml
Normal file
3
libs/androidfw/tests/data/basic/res/layout/main.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge>
|
||||
</merge>
|
||||
5
libs/androidfw/tests/data/basic/res/values-de/values.xml
Normal file
5
libs/androidfw/tests/data/basic/res/values-de/values.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="test1">versuch 1</string>
|
||||
<string name="test2">versuch 2</string>
|
||||
</resources>
|
||||
5
libs/androidfw/tests/data/basic/res/values-fr/values.xml
Normal file
5
libs/androidfw/tests/data/basic/res/values-fr/values.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="test1">essai 1</string>
|
||||
<string name="test2">essai 2</string>
|
||||
</resources>
|
||||
85
libs/androidfw/tests/data/basic/split_de_fr_arsc.h
Normal file
85
libs/androidfw/tests/data/basic/split_de_fr_arsc.h
Normal file
@@ -0,0 +1,85 @@
|
||||
unsigned char split_de_fr_arsc[] = {
|
||||
0x02, 0x00, 0x0c, 0x00, 0xd8, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x76, 0x00,
|
||||
0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00,
|
||||
0x20, 0x00, 0x31, 0x00, 0x00, 0x00, 0x09, 0x00, 0x76, 0x00, 0x65, 0x00,
|
||||
0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x20, 0x00,
|
||||
0x32, 0x00, 0x00, 0x00, 0x07, 0x00, 0x65, 0x00, 0x73, 0x00, 0x73, 0x00,
|
||||
0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00,
|
||||
0x65, 0x00, 0x73, 0x00, 0x73, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00,
|
||||
0x32, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x01, 0x50, 0x03, 0x00, 0x00,
|
||||
0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2e, 0x00,
|
||||
0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x69, 0x00,
|
||||
0x64, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x2e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x90, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
|
||||
0x3e, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x61, 0x00,
|
||||
0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x6c, 0x00,
|
||||
0x61, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00,
|
||||
0x67, 0x00, 0x00, 0x00, 0x07, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00,
|
||||
0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00,
|
||||
0x73, 0x00, 0x74, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x40, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00,
|
||||
0x74, 0x00, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00,
|
||||
0x73, 0x00, 0x74, 0x00, 0x32, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x6c, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x6c, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x72, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned int split_de_fr_arsc_len = 984;
|
||||
19
libs/androidfw/tests/data/feature/AndroidManifest.xml
Normal file
19
libs/androidfw/tests/data/feature/AndroidManifest.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.test.basic">
|
||||
</manifest>
|
||||
6
libs/androidfw/tests/data/feature/build
Executable file
6
libs/androidfw/tests/data/feature/build
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
aapt package -M AndroidManifest.xml -S res --feature-of ../basic/bundle.apk -F bundle.apk -f && \
|
||||
unzip bundle.apk resources.arsc && \
|
||||
mv resources.arsc feature.arsc && \
|
||||
xxd -i feature.arsc > feature_arsc.h
|
||||
73
libs/androidfw/tests/data/feature/feature_arsc.h
Normal file
73
libs/androidfw/tests/data/feature/feature_arsc.h
Normal file
@@ -0,0 +1,73 @@
|
||||
unsigned char feature_arsc[] = {
|
||||
0x02, 0x00, 0x0c, 0x00, 0x40, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x33, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x34, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x01, 0xf4, 0x02, 0x00, 0x00,
|
||||
0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2e, 0x00,
|
||||
0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x69, 0x00,
|
||||
0x64, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x2e, 0x00, 0x62, 0x00, 0x61, 0x00, 0x73, 0x00, 0x69, 0x00, 0x63, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
|
||||
0x2e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x65, 0x00, 0x6d, 0x00,
|
||||
0x70, 0x00, 0x74, 0x00, 0x79, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x04, 0x00,
|
||||
0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00,
|
||||
0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00,
|
||||
0x00, 0x00, 0x07, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00,
|
||||
0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00,
|
||||
0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x33, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x34, 0x00, 0x00, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6d, 0x00,
|
||||
0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x6c, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10,
|
||||
0xc8, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned int feature_arsc_len = 832;
|
||||
7
libs/androidfw/tests/data/feature/res/values/values.xml
Normal file
7
libs/androidfw/tests/data/feature/res/values/values.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="test3">test3</string>
|
||||
<string name="test4">test4</string>
|
||||
|
||||
<integer name="number3">200</integer>
|
||||
</resources>
|
||||
@@ -1,221 +0,0 @@
|
||||
unsigned char split_base_arsc[] = {
|
||||
0x02, 0x00, 0x0c, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0x94, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
|
||||
0x72, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
|
||||
0xb4, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
|
||||
0xf4, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00,
|
||||
0x44, 0x01, 0x00, 0x00, 0x13, 0x00, 0x72, 0x00, 0x65, 0x00, 0x73, 0x00,
|
||||
0x2f, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00,
|
||||
0x74, 0x00, 0x2f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00,
|
||||
0x2e, 0x00, 0x78, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x22, 0x00,
|
||||
0x72, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2f, 0x00, 0x6c, 0x00, 0x61, 0x00,
|
||||
0x79, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x2d, 0x00, 0x66, 0x00,
|
||||
0x72, 0x00, 0x2d, 0x00, 0x73, 0x00, 0x77, 0x00, 0x36, 0x00, 0x30, 0x00,
|
||||
0x30, 0x00, 0x64, 0x00, 0x70, 0x00, 0x2d, 0x00, 0x76, 0x00, 0x31, 0x00,
|
||||
0x33, 0x00, 0x2f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00,
|
||||
0x2e, 0x00, 0x78, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x09, 0x00,
|
||||
0x53, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x74, 0x00, 0x20, 0x00,
|
||||
0x41, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x48, 0x00,
|
||||
0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x2c, 0x00, 0x20, 0x00,
|
||||
0x57, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x64, 0x00, 0x21, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x6d, 0x00,
|
||||
0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x42, 0x00, 0x6c, 0x00, 0x61, 0x00,
|
||||
0x68, 0x00, 0x2e, 0x00, 0x2e, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x0b, 0x00,
|
||||
0x48, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x20, 0x00,
|
||||
0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x20, 0x00,
|
||||
0x62, 0x00, 0x79, 0x00, 0x65, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x49, 0x00,
|
||||
0x20, 0x00, 0x68, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x41, 0x00,
|
||||
0x4c, 0x00, 0x4c, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x49, 0x00,
|
||||
0x20, 0x00, 0x68, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x31, 0x00,
|
||||
0x21, 0x00, 0x31, 0x00, 0x21, 0x00, 0x20, 0x00, 0x3a, 0x00, 0x29, 0x00,
|
||||
0x00, 0x00, 0x0b, 0x00, 0x49, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x6f, 0x00,
|
||||
0x20, 0x00, 0x68, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x3a, 0x00,
|
||||
0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1c, 0x01,
|
||||
0x90, 0x08, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00,
|
||||
0x6d, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x72, 0x00,
|
||||
0x6f, 0x00, 0x69, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00,
|
||||
0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x2e, 0x00,
|
||||
0x73, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x1c, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00,
|
||||
0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0xd4, 0x00, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
|
||||
0x3a, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
|
||||
0x66, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x61, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00,
|
||||
0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00,
|
||||
0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x61, 0x00,
|
||||
0x72, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x07, 0x00,
|
||||
0x70, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x00,
|
||||
0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x6f, 0x00,
|
||||
0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6c, 0x00,
|
||||
0x6f, 0x00, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x64, 0x00, 0x69, 0x00,
|
||||
0x6d, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x69, 0x00,
|
||||
0x64, 0x00, 0x00, 0x00, 0x07, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00,
|
||||
0x65, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0x30, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x22, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
|
||||
0x46, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
|
||||
0x80, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
|
||||
0xa4, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x00, 0x00,
|
||||
0x09, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x74, 0x00,
|
||||
0x69, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x00, 0x00, 0x04, 0x00,
|
||||
0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x04, 0x00,
|
||||
0x62, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x00,
|
||||
0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x68, 0x00, 0x00, 0x00, 0x0d, 0x00,
|
||||
0x6c, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x66, 0x00,
|
||||
0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00,
|
||||
0x73, 0x00, 0x00, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6d, 0x00,
|
||||
0x4c, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x00, 0x00, 0x03, 0x00,
|
||||
0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x04, 0x00, 0x70, 0x00,
|
||||
0x6c, 0x00, 0x75, 0x00, 0x72, 0x00, 0x00, 0x00, 0x03, 0x00, 0x71, 0x00,
|
||||
0x75, 0x00, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x67, 0x00, 0x72, 0x00,
|
||||
0x65, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x77, 0x00,
|
||||
0x69, 0x00, 0x64, 0x00, 0x74, 0x00, 0x68, 0x00, 0x00, 0x00, 0x0a, 0x00,
|
||||
0x69, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x69, 0x00,
|
||||
0x66, 0x00, 0x69, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00,
|
||||
0x6e, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x04, 0x24, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x66, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x94, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0xc8, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03,
|
||||
0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03,
|
||||
0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x08, 0x00, 0x00, 0x10, 0xd2, 0x04, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x01, 0x00, 0x03, 0x7f,
|
||||
0x01, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x7f,
|
||||
0x02, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x05, 0x01, 0x19, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x7c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x00,
|
||||
0x09, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x58, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x58, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1d, 0x00, 0xff, 0x00, 0xff,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x58, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x01, 0x17, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05,
|
||||
0x01, 0xe6, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x0b, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10,
|
||||
0x7b, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned int split_base_arsc_len = 2608;
|
||||
@@ -1,118 +0,0 @@
|
||||
unsigned char split_de_fr_arsc[] = {
|
||||
0x02, 0x00, 0x0c, 0x00, 0x64, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00,
|
||||
0x6c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x41, 0x00, 0x63, 0x00, 0x68, 0x00,
|
||||
0x74, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x41, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x20, 0x00, 0x44, 0x00,
|
||||
0x69, 0x00, 0x76, 0x00, 0x69, 0x00, 0x73, 0x00, 0xe9, 0x00, 0x00, 0x00,
|
||||
0x0f, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x6f, 0x00,
|
||||
0x75, 0x00, 0x72, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x6f, 0x00,
|
||||
0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, 0x21, 0x00, 0x00, 0x00, 0x06, 0x00,
|
||||
0x42, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x68, 0x00, 0x2e, 0x00, 0x2e, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x48, 0x00, 0xe9, 0x00, 0x20, 0x00, 0x6c, 0x00,
|
||||
0xe0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x41, 0x00, 0x75, 0x00, 0x20, 0x00,
|
||||
0x72, 0x00, 0x65, 0x00, 0x76, 0x00, 0x6f, 0x00, 0x69, 0x00, 0x72, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1c, 0x01, 0xa0, 0x04, 0x00, 0x00,
|
||||
0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2e, 0x00,
|
||||
0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x69, 0x00,
|
||||
0x64, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x61, 0x00, 0x6d, 0x00,
|
||||
0x70, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x73, 0x00, 0x70, 0x00,
|
||||
0x6c, 0x00, 0x69, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x1c, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x1c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
|
||||
0x4c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
|
||||
0x74, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x61, 0x00,
|
||||
0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x6c, 0x00,
|
||||
0x61, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00,
|
||||
0x06, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00,
|
||||
0x67, 0x00, 0x00, 0x00, 0x05, 0x00, 0x61, 0x00, 0x72, 0x00, 0x72, 0x00,
|
||||
0x61, 0x00, 0x79, 0x00, 0x00, 0x00, 0x07, 0x00, 0x70, 0x00, 0x6c, 0x00,
|
||||
0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x73, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x00, 0x00,
|
||||
0x05, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x72, 0x00,
|
||||
0x00, 0x00, 0x05, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x65, 0x00,
|
||||
0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x67, 0x00,
|
||||
0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00,
|
||||
0x78, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
|
||||
0x2e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
|
||||
0x5f, 0x00, 0x74, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00,
|
||||
0x00, 0x00, 0x04, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00,
|
||||
0x00, 0x00, 0x04, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x68, 0x00,
|
||||
0x00, 0x00, 0x0d, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x73, 0x00,
|
||||
0x6f, 0x00, 0x66, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00,
|
||||
0x6e, 0x00, 0x67, 0x00, 0x73, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x64, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
|
||||
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00,
|
||||
0x84, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x54, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x66, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x03,
|
||||
0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x02, 0x44, 0x00, 0x78, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x66, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x01, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,
|
||||
0x14, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00,
|
||||
0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned int split_de_fr_arsc_len = 1380;
|
||||
25
tests/FeatureSplit/base/Android.mk
Normal file
25
tests/FeatureSplit/base/Android.mk
Normal file
@@ -0,0 +1,25 @@
|
||||
#
|
||||
# Copyright (C) 2014 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := $(call all-subdir-java-files)
|
||||
LOCAL_PACKAGE_NAME := FeatureSplitBase
|
||||
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
include $(BUILD_PACKAGE)
|
||||
22
tests/FeatureSplit/base/AndroidManifest.xml
Normal file
22
tests/FeatureSplit/base/AndroidManifest.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.test.split.feature">
|
||||
<application android:label="@string/app_title"
|
||||
android:hasCode="false">
|
||||
</application>
|
||||
</manifest>
|
||||
24
tests/FeatureSplit/base/res/values/values.xml
Normal file
24
tests/FeatureSplit/base/res/values/values.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<string name="app_title">FeatureSplit APK</string>
|
||||
|
||||
<item type="id" name="test_id"/>
|
||||
<integer name="test_integer">100</integer>
|
||||
<color name="test_color">#ff0000</color>
|
||||
</resources>
|
||||
|
||||
32
tests/FeatureSplit/feature1/Android.mk
Normal file
32
tests/FeatureSplit/feature1/Android.mk
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Copyright (C) 2014 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := $(call all-subdir-java-files)
|
||||
LOCAL_PACKAGE_NAME := FeatureSplit1
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
featureOf := FeatureSplitBase
|
||||
featureOfApk := $(call intermediates-dir-for,APPS,$(featureOf))/package.apk
|
||||
localRStamp := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),,COMMON)/src/R.stamp
|
||||
$(localRStamp): $(featureOfApk)
|
||||
|
||||
$(info $(localRStamp))
|
||||
LOCAL_AAPT_FLAGS := --feature-of $(featureOfApk)
|
||||
|
||||
include $(BUILD_PACKAGE)
|
||||
21
tests/FeatureSplit/feature1/AndroidManifest.xml
Normal file
21
tests/FeatureSplit/feature1/AndroidManifest.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.test.split.feature"
|
||||
featureName="feature1">
|
||||
<application android:hasCode="false" />
|
||||
</manifest>
|
||||
25
tests/FeatureSplit/feature1/res/values/values.xml
Normal file
25
tests/FeatureSplit/feature1/res/values/values.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<item type="id" name="test_id2"/>
|
||||
<integer name="test_integer2">200</integer>
|
||||
<color name="test_color2">#00ff00</color>
|
||||
<string-array name="string_array2">
|
||||
<item>@*string/app_title</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
35
tests/FeatureSplit/feature2/Android.mk
Normal file
35
tests/FeatureSplit/feature2/Android.mk
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# Copyright (C) 2014 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := $(call all-subdir-java-files)
|
||||
LOCAL_PACKAGE_NAME := FeatureSplit2
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
featureOf := FeatureSplitBase
|
||||
featureAfter := FeatureSplit1
|
||||
|
||||
featureOfApk := $(call intermediates-dir-for,APPS,$(featureOf))/package.apk
|
||||
featureAfterApk := $(call intermediates-dir-for,APPS,$(featureAfter))/package.apk
|
||||
localRStamp := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),,COMMON)/src/R.stamp
|
||||
$(localRStamp): $(featureOfApk) $(featureAfterApk)
|
||||
|
||||
LOCAL_AAPT_FLAGS := --feature-of $(featureOfApk)
|
||||
LOCAL_AAPT_FLAGS += --feature-after $(featureAfterApk)
|
||||
|
||||
include $(BUILD_PACKAGE)
|
||||
21
tests/FeatureSplit/feature2/AndroidManifest.xml
Normal file
21
tests/FeatureSplit/feature2/AndroidManifest.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.test.split.feature"
|
||||
featureName="feature2">
|
||||
<application android:hasCode="false"/>
|
||||
</manifest>
|
||||
24
tests/FeatureSplit/feature2/res/values/values.xml
Normal file
24
tests/FeatureSplit/feature2/res/values/values.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<integer name="test_integer3">300</integer>
|
||||
<color name="test_color3">#0000ff</color>
|
||||
<string-array name="string_array3">
|
||||
<item>@string/app_title</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -1542,22 +1542,41 @@ bool AaptAssets::isJavaSymbol(const AaptSymbolEntry& sym, bool includePrivate) c
|
||||
|
||||
status_t AaptAssets::buildIncludedResources(Bundle* bundle)
|
||||
{
|
||||
if (!mHaveIncludedAssets) {
|
||||
// Add in all includes.
|
||||
const Vector<const char*>& incl = bundle->getPackageIncludes();
|
||||
const size_t N=incl.size();
|
||||
for (size_t i=0; i<N; i++) {
|
||||
if (bundle->getVerbose())
|
||||
printf("Including resources from package: %s\n", incl[i]);
|
||||
if (!mIncludedAssets.addAssetPath(String8(incl[i]), NULL)) {
|
||||
fprintf(stderr, "ERROR: Asset package include '%s' not found.\n",
|
||||
incl[i]);
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
mHaveIncludedAssets = true;
|
||||
if (mHaveIncludedAssets) {
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
// Add in all includes.
|
||||
const Vector<String8>& includes = bundle->getPackageIncludes();
|
||||
const size_t packageIncludeCount = includes.size();
|
||||
for (size_t i = 0; i < packageIncludeCount; i++) {
|
||||
if (bundle->getVerbose()) {
|
||||
printf("Including resources from package: %s\n", includes[i].string());
|
||||
}
|
||||
|
||||
if (!mIncludedAssets.addAssetPath(includes[i], NULL)) {
|
||||
fprintf(stderr, "ERROR: Asset package include '%s' not found.\n",
|
||||
includes[i].string());
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
const String8& featureOfBase = bundle->getFeatureOfPackage();
|
||||
if (!featureOfBase.isEmpty()) {
|
||||
if (bundle->getVerbose()) {
|
||||
printf("Including base feature resources from package: %s\n",
|
||||
featureOfBase.string());
|
||||
}
|
||||
|
||||
if (!mIncludedAssets.addAssetPath(featureOfBase, NULL)) {
|
||||
fprintf(stderr, "ERROR: base feature package '%s' not found.\n",
|
||||
featureOfBase.string());
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
mHaveIncludedAssets = true;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@@ -159,12 +159,16 @@ public:
|
||||
const android::Vector<android::String8>& getSplitConfigurations() const { return mPartialConfigurations; }
|
||||
const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
|
||||
void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
|
||||
const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
|
||||
void addPackageInclude(const char* file) { mPackageIncludes.add(file); }
|
||||
const android::Vector<android::String8>& getPackageIncludes() const { return mPackageIncludes; }
|
||||
void addPackageInclude(const char* file) { mPackageIncludes.add(android::String8(file)); }
|
||||
const android::Vector<const char*>& getJarFiles() const { return mJarFiles; }
|
||||
void addJarFile(const char* file) { mJarFiles.add(file); }
|
||||
const android::Vector<const char*>& getNoCompressExtensions() const { return mNoCompressExtensions; }
|
||||
void addNoCompressExtension(const char* ext) { mNoCompressExtensions.add(ext); }
|
||||
void setFeatureOfPackage(const char* str) { mFeatureOfPackage = str; }
|
||||
const android::String8& getFeatureOfPackage() const { return mFeatureOfPackage; }
|
||||
void setFeatureAfterPackage(const char* str) { mFeatureAfterPackage = str; }
|
||||
const android::String8& getFeatureAfterPackage() const { return mFeatureAfterPackage; }
|
||||
|
||||
const char* getManifestMinSdkVersion() const { return mManifestMinSdkVersion; }
|
||||
void setManifestMinSdkVersion(const char* val) { mManifestMinSdkVersion = val; }
|
||||
@@ -290,12 +294,14 @@ private:
|
||||
android::String8 mConfigurations;
|
||||
android::String8 mPreferredDensity;
|
||||
android::Vector<android::String8> mPartialConfigurations;
|
||||
android::Vector<const char*> mPackageIncludes;
|
||||
android::Vector<android::String8> mPackageIncludes;
|
||||
android::Vector<const char*> mJarFiles;
|
||||
android::Vector<const char*> mNoCompressExtensions;
|
||||
android::Vector<const char*> mAssetSourceDirs;
|
||||
android::Vector<const char*> mResourceSourceDirs;
|
||||
|
||||
android::String8 mFeatureOfPackage;
|
||||
android::String8 mFeatureAfterPackage;
|
||||
const char* mManifestMinSdkVersion;
|
||||
const char* mMinSdkVersion;
|
||||
const char* mTargetSdkVersion;
|
||||
|
||||
@@ -71,6 +71,7 @@ void usage(void)
|
||||
" [--product product1,product2,...] \\\n"
|
||||
" [-c CONFIGS] [--preferred-configurations CONFIGS] \\\n"
|
||||
" [--split CONFIGS [--split CONFIGS]] \\\n"
|
||||
" [--feature-of package [--feature-after package]] \\\n"
|
||||
" [raw-files-dir [raw-files-dir] ...] \\\n"
|
||||
" [--output-text-symbols DIR]\n"
|
||||
"\n"
|
||||
@@ -167,6 +168,14 @@ void usage(void)
|
||||
" --split\n"
|
||||
" Builds a separate split APK for the configurations listed. This can\n"
|
||||
" be loaded alongside the base APK at runtime.\n"
|
||||
" --feature-of\n"
|
||||
" Builds a split APK that is a feature of the apk specified here. Resources\n"
|
||||
" in the base APK can be referenced from the the feature APK.\n"
|
||||
" --feature-after\n"
|
||||
" An app can have multiple Feature Split APKs which must be totally ordered.\n"
|
||||
" If --feature-of is specified, this flag specifies which Feature Split APK\n"
|
||||
" comes before this one. The first Feature Split APK should not define\n"
|
||||
" anything here.\n"
|
||||
" --rename-manifest-package\n"
|
||||
" Rewrite the manifest so that its package name is the package name\n"
|
||||
" given here. Relative class names (for example .Foo) will be\n"
|
||||
@@ -583,6 +592,24 @@ int main(int argc, char* const argv[])
|
||||
goto bail;
|
||||
}
|
||||
bundle.addSplitConfigurations(argv[0]);
|
||||
} else if (strcmp(cp, "-feature-of") == 0) {
|
||||
argc--;
|
||||
argv++;
|
||||
if (!argc) {
|
||||
fprintf(stderr, "ERROR: No argument supplied for '--feature-of' option\n");
|
||||
wantUsage = true;
|
||||
goto bail;
|
||||
}
|
||||
bundle.setFeatureOfPackage(argv[0]);
|
||||
} else if (strcmp(cp, "-feature-after") == 0) {
|
||||
argc--;
|
||||
argv++;
|
||||
if (!argc) {
|
||||
fprintf(stderr, "ERROR: No argument supplied for '--feature-after' option\n");
|
||||
wantUsage = true;
|
||||
goto bail;
|
||||
}
|
||||
bundle.setFeatureAfterPackage(argv[0]);
|
||||
} else if (strcmp(cp, "-rename-manifest-package") == 0) {
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
@@ -860,6 +860,18 @@ status_t massageManifest(Bundle* bundle, sp<XMLNode> root)
|
||||
}
|
||||
}
|
||||
|
||||
// Generate split name if feature is present.
|
||||
const XMLNode::attribute_entry* attr = root->getAttribute(String16(), String16("featureName"));
|
||||
if (attr != NULL) {
|
||||
String16 splitName("feature_");
|
||||
splitName.append(attr->string);
|
||||
status_t err = root->addAttribute(String16(), String16("split"), splitName);
|
||||
if (err != NO_ERROR) {
|
||||
ALOGE("Failed to insert split name into AndroidManifest.xml");
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
@@ -968,7 +980,16 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets, sp<ApkBuil
|
||||
NOISY(printf("Creating resources for package %s\n",
|
||||
assets->getPackage().string()));
|
||||
|
||||
ResourceTable table(bundle, String16(assets->getPackage()));
|
||||
ResourceTable::PackageType packageType = ResourceTable::App;
|
||||
if (bundle->getBuildSharedLibrary()) {
|
||||
packageType = ResourceTable::SharedLibrary;
|
||||
} else if (bundle->getExtending()) {
|
||||
packageType = ResourceTable::System;
|
||||
} else if (!bundle->getFeatureOfPackage().isEmpty()) {
|
||||
packageType = ResourceTable::AppFeature;
|
||||
}
|
||||
|
||||
ResourceTable table(bundle, String16(assets->getPackage()), packageType);
|
||||
err = table.addIncludedResources(bundle, assets);
|
||||
if (err != NO_ERROR) {
|
||||
return err;
|
||||
|
||||
@@ -1713,12 +1713,49 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
return hasErrors ? UNKNOWN_ERROR : NO_ERROR;
|
||||
}
|
||||
|
||||
ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage)
|
||||
: mAssetsPackage(assetsPackage), mNextPackageId(1), mHaveAppPackage(false),
|
||||
mIsAppPackage(!bundle->getExtending()), mIsSharedLibrary(bundle->getBuildSharedLibrary()),
|
||||
mNumLocal(0),
|
||||
mBundle(bundle)
|
||||
ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage, ResourceTable::PackageType type)
|
||||
: mAssetsPackage(assetsPackage)
|
||||
, mPackageType(type)
|
||||
, mTypeIdOffset(0)
|
||||
, mNumLocal(0)
|
||||
, mBundle(bundle)
|
||||
{
|
||||
ssize_t packageId = -1;
|
||||
switch (mPackageType) {
|
||||
case App:
|
||||
case AppFeature:
|
||||
packageId = 0x7f;
|
||||
break;
|
||||
|
||||
case System:
|
||||
packageId = 0x01;
|
||||
break;
|
||||
|
||||
case SharedLibrary:
|
||||
packageId = 0x00;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
sp<Package> package = new Package(mAssetsPackage, packageId);
|
||||
mPackages.add(assetsPackage, package);
|
||||
mOrderedPackages.add(package);
|
||||
|
||||
// Every resource table always has one first entry, the bag attributes.
|
||||
const SourcePos unknown(String8("????"), 0);
|
||||
getType(mAssetsPackage, String16("attr"), unknown);
|
||||
}
|
||||
|
||||
static uint32_t findLargestTypeIdForPackage(const ResTable& table, const String16& packageName) {
|
||||
const size_t basePackageCount = table.getBasePackageCount();
|
||||
for (size_t i = 0; i < basePackageCount; i++) {
|
||||
if (packageName == table.getBasePackageName(i)) {
|
||||
return table.getLastTypeIdForPackage(i);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
status_t ResourceTable::addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets)
|
||||
@@ -1728,59 +1765,22 @@ status_t ResourceTable::addIncludedResources(Bundle* bundle, const sp<AaptAssets
|
||||
return err;
|
||||
}
|
||||
|
||||
// For future reference to included resources.
|
||||
mAssets = assets;
|
||||
mTypeIdOffset = findLargestTypeIdForPackage(assets->getIncludedResources(), mAssetsPackage);
|
||||
|
||||
const ResTable& incl = assets->getIncludedResources();
|
||||
|
||||
// Retrieve all the packages.
|
||||
const size_t N = incl.getBasePackageCount();
|
||||
for (size_t phase=0; phase<2; phase++) {
|
||||
for (size_t i=0; i<N; i++) {
|
||||
const String16 name = incl.getBasePackageName(i);
|
||||
uint32_t id = incl.getBasePackageId(i);
|
||||
|
||||
// First time through: only add base packages (id
|
||||
// is not 0); second time through add the other
|
||||
// packages.
|
||||
if (phase != 0) {
|
||||
if (id != 0) {
|
||||
// Skip base packages -- already one.
|
||||
id = 0;
|
||||
} else {
|
||||
// Assign a dynamic id.
|
||||
id = mNextPackageId;
|
||||
}
|
||||
} else if (id != 0) {
|
||||
if (id == 127) {
|
||||
if (mHaveAppPackage) {
|
||||
fprintf(stderr, "Included resources have two application packages!\n");
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
mHaveAppPackage = true;
|
||||
}
|
||||
if (mNextPackageId > id) {
|
||||
fprintf(stderr, "Included base package ID %d already in use!\n", id);
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
if (id != 0) {
|
||||
NOISY(fprintf(stderr, "Including package %s with ID=%d\n",
|
||||
String8(name).string(), id));
|
||||
sp<Package> p = new Package(name, id);
|
||||
mPackages.add(name, p);
|
||||
mOrderedPackages.add(p);
|
||||
|
||||
if (id >= mNextPackageId) {
|
||||
mNextPackageId = id+1;
|
||||
}
|
||||
}
|
||||
const String8& featureAfter = bundle->getFeatureAfterPackage();
|
||||
if (!featureAfter.isEmpty()) {
|
||||
AssetManager featureAssetManager;
|
||||
if (!featureAssetManager.addAssetPath(featureAfter, NULL)) {
|
||||
fprintf(stderr, "ERROR: Feature package '%s' not found.\n",
|
||||
featureAfter.string());
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
// Every resource table always has one first entry, the bag attributes.
|
||||
const SourcePos unknown(String8("????"), 0);
|
||||
sp<Type> attr = getType(mAssetsPackage, String16("attr"), unknown);
|
||||
const ResTable& featureTable = featureAssetManager.getResources(false);
|
||||
mTypeIdOffset = max(mTypeIdOffset,
|
||||
findLargestTypeIdForPackage(featureTable, mAssetsPackage));
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
@@ -1820,24 +1820,16 @@ status_t ResourceTable::addEntry(const SourcePos& sourcePos,
|
||||
const int32_t format,
|
||||
const bool overwrite)
|
||||
{
|
||||
// Check for adding entries in other packages... for now we do
|
||||
// nothing. We need to do the right thing here to support skinning.
|
||||
uint32_t rid = mAssets->getIncludedResources()
|
||||
.identifierForName(name.string(), name.size(),
|
||||
type.string(), type.size(),
|
||||
package.string(), package.size());
|
||||
if (rid != 0) {
|
||||
return NO_ERROR;
|
||||
sourcePos.error("Resource entry %s/%s is already defined in package %s.",
|
||||
String8(type).string(), String8(name).string(), String8(package).string());
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (name == String16("left")) {
|
||||
printf("Adding entry left: file=%s, line=%d, type=%s, value=%s\n",
|
||||
sourcePos.file.string(), sourcePos.line, String8(type).string(),
|
||||
String8(value).string());
|
||||
}
|
||||
#endif
|
||||
|
||||
sp<Entry> e = getEntry(package, type, name, sourcePos, overwrite,
|
||||
params, doSetIndex);
|
||||
if (e == NULL) {
|
||||
@@ -1868,15 +1860,11 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos,
|
||||
type.string(), type.size(),
|
||||
package.string(), package.size());
|
||||
if (rid != 0) {
|
||||
return NO_ERROR;
|
||||
sourcePos.error("Resource entry %s/%s is already defined in package %s.",
|
||||
String8(type).string(), String8(name).string(), String8(package).string());
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (name == String16("left")) {
|
||||
printf("Adding bag left: file=%s, line=%d, type=%s\n",
|
||||
sourcePos.file.striing(), sourcePos.line, String8(type).string());
|
||||
}
|
||||
#endif
|
||||
|
||||
if (overlay && !mBundle->getAutoAddOverlay() && !hasBagOrEntry(package, type, name)) {
|
||||
bool canAdd = false;
|
||||
sp<Package> p = mPackages.valueFor(package);
|
||||
@@ -2117,9 +2105,6 @@ uint32_t ResourceTable::getResId(const String16& package,
|
||||
uint32_t id = ResourceIdCache::lookup(package, type, name, onlyPublic);
|
||||
if (id != 0) return id; // cache hit
|
||||
|
||||
sp<Package> p = mPackages.valueFor(package);
|
||||
if (p == NULL) return 0;
|
||||
|
||||
// First look for this in the included resources...
|
||||
uint32_t specFlags = 0;
|
||||
uint32_t rid = mAssets->getIncludedResources()
|
||||
@@ -2134,13 +2119,11 @@ uint32_t ResourceTable::getResId(const String16& package,
|
||||
}
|
||||
}
|
||||
|
||||
if (Res_INTERNALID(rid)) {
|
||||
return ResourceIdCache::store(package, type, name, onlyPublic, rid);
|
||||
}
|
||||
return ResourceIdCache::store(package, type, name, onlyPublic,
|
||||
Res_MAKEID(p->getAssignedId()-1, Res_GETTYPE(rid), Res_GETENTRY(rid)));
|
||||
return ResourceIdCache::store(package, type, name, onlyPublic, rid);
|
||||
}
|
||||
|
||||
sp<Package> p = mPackages.valueFor(package);
|
||||
if (p == NULL) return 0;
|
||||
sp<Type> t = p->getTypes().valueFor(type);
|
||||
if (t == NULL) return 0;
|
||||
sp<ConfigList> c = t->getConfigs().valueFor(name);
|
||||
@@ -2294,9 +2277,12 @@ uint32_t ResourceTable::getCustomResourceWithCreation(
|
||||
}
|
||||
|
||||
if (mAssetsPackage != package) {
|
||||
mCurrentXmlPos.warning("creating resource for external package %s: %s/%s.",
|
||||
mCurrentXmlPos.error("creating resource for external package %s: %s/%s.",
|
||||
String8(package).string(), String8(type).string(), String8(name).string());
|
||||
mCurrentXmlPos.printf("This will be an error in a future version of AAPT.");
|
||||
if (package == String16("android")) {
|
||||
mCurrentXmlPos.printf("did you mean to use @+id instead of @+android:id?");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
String16 value("false");
|
||||
@@ -2479,6 +2465,7 @@ status_t ResourceTable::assignResourceIds()
|
||||
continue;
|
||||
}
|
||||
|
||||
// This has no sense for packages being built as AppFeature (aka with a non-zero offset).
|
||||
status_t err = p->applyPublicTypeOrder();
|
||||
if (err != NO_ERROR && firstError == NO_ERROR) {
|
||||
firstError = err;
|
||||
@@ -2512,6 +2499,11 @@ status_t ResourceTable::assignResourceIds()
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t typeIdOffset = 0;
|
||||
if (mPackageType == AppFeature && p->getName() == mAssetsPackage) {
|
||||
typeIdOffset = mTypeIdOffset;
|
||||
}
|
||||
|
||||
const SourcePos unknown(String8("????"), 0);
|
||||
sp<Type> attr = p->getType(String16("attr"), unknown);
|
||||
|
||||
@@ -2527,7 +2519,7 @@ status_t ResourceTable::assignResourceIds()
|
||||
}
|
||||
|
||||
const size_t N = t->getOrderedConfigs().size();
|
||||
t->setIndex(ti+1);
|
||||
t->setIndex(ti + 1 + typeIdOffset);
|
||||
|
||||
LOG_ALWAYS_FATAL_IF(ti == 0 && attr != t,
|
||||
"First type is not attr!");
|
||||
@@ -2599,7 +2591,7 @@ status_t ResourceTable::addSymbols(const sp<AaptSymbols>& outSymbols) {
|
||||
if (rid == 0) {
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
if (Res_GETPACKAGE(rid) == (size_t)(p->getAssignedId()-1)) {
|
||||
if (Res_GETPACKAGE(rid) + 1 == p->getAssignedId()) {
|
||||
typeSymbols->addSymbol(String8(c->getName()), rid, c->getPos());
|
||||
|
||||
String16 comment(c->getComment());
|
||||
@@ -2608,11 +2600,6 @@ status_t ResourceTable::addSymbols(const sp<AaptSymbols>& outSymbols) {
|
||||
// String8(c->getName()).string(), String8(comment).string());
|
||||
comment = c->getTypeComment();
|
||||
typeSymbols->appendTypeComment(String8(c->getName()), comment);
|
||||
} else {
|
||||
#if 0
|
||||
printf("**** NO MATCH: 0x%08x vs 0x%08x\n",
|
||||
Res_GETPACKAGE(rid), p->getAssignedId());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2749,7 +2736,7 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>&
|
||||
}
|
||||
continue;
|
||||
} else if (p->getAssignedId() == 0x00) {
|
||||
if (!bundle->getBuildSharedLibrary()) {
|
||||
if (mPackageType != SharedLibrary) {
|
||||
fprintf(stderr, "ERROR: Package %s can not have ID=0x00 unless building a shared library.",
|
||||
String8(p->getName()).string());
|
||||
return UNKNOWN_ERROR;
|
||||
@@ -2761,15 +2748,24 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>&
|
||||
StringPool typeStrings(useUTF8);
|
||||
StringPool keyStrings(useUTF8);
|
||||
|
||||
ssize_t stringsAdded = 0;
|
||||
const size_t N = p->getOrderedTypes().size();
|
||||
for (size_t ti=0; ti<N; ti++) {
|
||||
sp<Type> t = p->getOrderedTypes().itemAt(ti);
|
||||
if (t == NULL) {
|
||||
typeStrings.add(String16("<empty>"), false);
|
||||
stringsAdded++;
|
||||
continue;
|
||||
}
|
||||
|
||||
while (stringsAdded < t->getIndex() - 1) {
|
||||
typeStrings.add(String16("<empty>"), false);
|
||||
stringsAdded++;
|
||||
}
|
||||
|
||||
const String16 typeName(t->getName());
|
||||
typeStrings.add(typeName, false);
|
||||
stringsAdded++;
|
||||
|
||||
// This is a hack to tweak the sorting order of the final strings,
|
||||
// to put stuff that is generally not language-specific first.
|
||||
@@ -2862,7 +2858,7 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>&
|
||||
memset(header, 0, sizeof(*header));
|
||||
header->header.type = htods(RES_TABLE_PACKAGE_TYPE);
|
||||
header->header.headerSize = htods(sizeof(*header));
|
||||
header->id = htodl(p->getAssignedId());
|
||||
header->id = htodl(static_cast<uint32_t>(p->getAssignedId()));
|
||||
strcpy16_htod(header->name, p->getName().string());
|
||||
|
||||
// Write the string blocks.
|
||||
@@ -2902,7 +2898,9 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>&
|
||||
LOG_ALWAYS_FATAL_IF(t == NULL && typeName != String16("<empty>"),
|
||||
"Type name %s not found",
|
||||
String8(typeName).string());
|
||||
|
||||
if (t == NULL) {
|
||||
continue;
|
||||
}
|
||||
const bool filterable = (typeName != mipmap16);
|
||||
|
||||
const size_t N = t != NULL ? t->getOrderedConfigs().size() : 0;
|
||||
@@ -3062,21 +3060,25 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>&
|
||||
tHeader->header.size = htodl(data->getSize()-typeStart);
|
||||
}
|
||||
|
||||
bool missing_entry = false;
|
||||
const char* log_prefix = bundle->getErrorOnMissingConfigEntry() ?
|
||||
"error" : "warning";
|
||||
for (size_t i = 0; i < N; ++i) {
|
||||
if (!validResources[i]) {
|
||||
sp<ConfigList> c = t->getOrderedConfigs().itemAt(i);
|
||||
fprintf(stderr, "%s: no entries written for %s/%s (0x%08x)\n", log_prefix,
|
||||
String8(typeName).string(), String8(c->getName()).string(),
|
||||
Res_MAKEID(p->getAssignedId() - 1, ti, i));
|
||||
missing_entry = true;
|
||||
// If we're building splits, then each invocation of the flattening
|
||||
// step will have 'missing' entries. Don't warn/error for this case.
|
||||
if (bundle->getSplitConfigurations().isEmpty()) {
|
||||
bool missing_entry = false;
|
||||
const char* log_prefix = bundle->getErrorOnMissingConfigEntry() ?
|
||||
"error" : "warning";
|
||||
for (size_t i = 0; i < N; ++i) {
|
||||
if (!validResources[i]) {
|
||||
sp<ConfigList> c = t->getOrderedConfigs().itemAt(i);
|
||||
fprintf(stderr, "%s: no entries written for %s/%s (0x%08x)\n", log_prefix,
|
||||
String8(typeName).string(), String8(c->getName()).string(),
|
||||
Res_MAKEID(p->getAssignedId() - 1, ti, i));
|
||||
missing_entry = true;
|
||||
}
|
||||
}
|
||||
if (bundle->getErrorOnMissingConfigEntry() && missing_entry) {
|
||||
fprintf(stderr, "Error: Missing entries, quit!\n");
|
||||
return NOT_ENOUGH_DATA;
|
||||
}
|
||||
}
|
||||
if (bundle->getErrorOnMissingConfigEntry() && missing_entry) {
|
||||
fprintf(stderr, "Error: Missing entries, quit!\n");
|
||||
return NOT_ENOUGH_DATA;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3819,8 +3821,8 @@ status_t ResourceTable::Type::applyPublicEntryOrder()
|
||||
return hasError ? UNKNOWN_ERROR : NO_ERROR;
|
||||
}
|
||||
|
||||
ResourceTable::Package::Package(const String16& name, ssize_t includedId)
|
||||
: mName(name), mIncludedId(includedId),
|
||||
ResourceTable::Package::Package(const String16& name, size_t packageId)
|
||||
: mName(name), mPackageId(packageId),
|
||||
mTypeStringsMapping(0xffffffff),
|
||||
mKeyStringsMapping(0xffffffff)
|
||||
{
|
||||
@@ -3945,26 +3947,10 @@ status_t ResourceTable::Package::applyPublicTypeOrder()
|
||||
|
||||
sp<ResourceTable::Package> ResourceTable::getPackage(const String16& package)
|
||||
{
|
||||
sp<Package> p = mPackages.valueFor(package);
|
||||
if (p == NULL) {
|
||||
if (mIsAppPackage) {
|
||||
if (mHaveAppPackage) {
|
||||
fprintf(stderr, "Adding multiple application package resources; only one is allowed.\n"
|
||||
"Use -x to create extended resources.\n");
|
||||
return NULL;
|
||||
}
|
||||
mHaveAppPackage = true;
|
||||
p = new Package(package, mIsSharedLibrary ? 0 : 127);
|
||||
} else {
|
||||
p = new Package(package, mNextPackageId);
|
||||
}
|
||||
//printf("*** NEW PACKAGE: \"%s\" id=%d\n",
|
||||
// String8(package).string(), p->getAssignedId());
|
||||
mPackages.add(package, p);
|
||||
mOrderedPackages.add(p);
|
||||
mNextPackageId++;
|
||||
if (package != mAssetsPackage) {
|
||||
return NULL;
|
||||
}
|
||||
return p;
|
||||
return mPackages.valueFor(package);
|
||||
}
|
||||
|
||||
sp<ResourceTable::Type> ResourceTable::getType(const String16& package,
|
||||
@@ -3997,11 +3983,10 @@ sp<ResourceTable::Entry> ResourceTable::getEntry(const String16& package,
|
||||
sp<const ResourceTable::Entry> ResourceTable::getEntry(uint32_t resID,
|
||||
const ResTable_config* config) const
|
||||
{
|
||||
int pid = Res_GETPACKAGE(resID)+1;
|
||||
size_t pid = Res_GETPACKAGE(resID)+1;
|
||||
const size_t N = mOrderedPackages.size();
|
||||
size_t i;
|
||||
sp<Package> p;
|
||||
for (i=0; i<N; i++) {
|
||||
for (size_t i = 0; i < N; i++) {
|
||||
sp<Package> check = mOrderedPackages[i];
|
||||
if (check->getAssignedId() == pid) {
|
||||
p = check;
|
||||
|
||||
@@ -74,11 +74,23 @@ struct AccessorCookie
|
||||
class ResourceTable : public ResTable::Accessor
|
||||
{
|
||||
public:
|
||||
// The type of package to build.
|
||||
enum PackageType {
|
||||
App,
|
||||
System,
|
||||
SharedLibrary,
|
||||
AppFeature
|
||||
};
|
||||
|
||||
class Package;
|
||||
class Type;
|
||||
class Entry;
|
||||
|
||||
ResourceTable(Bundle* bundle, const String16& assetsPackage);
|
||||
ResourceTable(Bundle* bundle, const String16& assetsPackage, PackageType type);
|
||||
|
||||
const String16& getAssetsPackage() const {
|
||||
return mAssetsPackage;
|
||||
}
|
||||
|
||||
status_t addIncludedResources(Bundle* bundle, const sp<AaptAssets>& assets);
|
||||
|
||||
@@ -448,7 +460,7 @@ public:
|
||||
|
||||
class Package : public RefBase {
|
||||
public:
|
||||
Package(const String16& name, ssize_t includedId=-1);
|
||||
Package(const String16& name, size_t packageId);
|
||||
virtual ~Package() { }
|
||||
|
||||
String16 getName() const { return mName; }
|
||||
@@ -456,7 +468,7 @@ public:
|
||||
const SourcePos& pos,
|
||||
bool doSetIndex = false);
|
||||
|
||||
ssize_t getAssignedId() const { return mIncludedId; }
|
||||
size_t getAssignedId() const { return mPackageId; }
|
||||
|
||||
const ResStringPool& getTypeStrings() const { return mTypeStrings; }
|
||||
uint32_t indexOfTypeString(const String16& s) const { return mTypeStringsMapping.valueFor(s); }
|
||||
@@ -479,7 +491,7 @@ public:
|
||||
DefaultKeyedVector<String16, uint32_t>* mappings);
|
||||
|
||||
const String16 mName;
|
||||
const ssize_t mIncludedId;
|
||||
const size_t mPackageId;
|
||||
DefaultKeyedVector<String16, sp<Type> > mTypes;
|
||||
Vector<sp<Type> > mOrderedTypes;
|
||||
sp<AaptFile> mTypeStringsData;
|
||||
@@ -512,13 +524,11 @@ private:
|
||||
|
||||
|
||||
String16 mAssetsPackage;
|
||||
PackageType mPackageType;
|
||||
sp<AaptAssets> mAssets;
|
||||
uint32_t mTypeIdOffset;
|
||||
DefaultKeyedVector<String16, sp<Package> > mPackages;
|
||||
Vector<sp<Package> > mOrderedPackages;
|
||||
uint32_t mNextPackageId;
|
||||
bool mHaveAppPackage;
|
||||
bool mIsAppPackage;
|
||||
bool mIsSharedLibrary;
|
||||
size_t mNumLocal;
|
||||
SourcePos mCurrentXmlPos;
|
||||
Bundle* mBundle;
|
||||
|
||||
Reference in New Issue
Block a user