Merge "AAPT support for feature splits" into lmp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ec64709ce0
@@ -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