Ensure that split names are valid

Generate valid split names for resource splits.
Validate split names for features.

Change-Id: I3040438af0156778c2bd66ddeffdf62fe9dcc9fc
diff --git a/tools/aapt/ApkBuilder.cpp b/tools/aapt/ApkBuilder.cpp
index 12f6040..01e02e2 100644
--- a/tools/aapt/ApkBuilder.cpp
+++ b/tools/aapt/ApkBuilder.cpp
@@ -85,11 +85,24 @@
         if (mName.size() > 0) {
             mName.append(",");
             mDirName.append("_");
+            mPackageSafeName.append(".");
         }
 
         String8 configStr = iter->toString();
+        String8 packageConfigStr(configStr);
+        size_t len = packageConfigStr.length();
+        if (len > 0) {
+            char* buf = packageConfigStr.lockBuffer(len);
+            for (char* end = buf + len; buf < end; ++buf) {
+                if (*buf == '-') {
+                    *buf = '_';
+                }
+            }
+            packageConfigStr.unlockBuffer(len);
+        }
         mName.append(configStr);
         mDirName.append(configStr);
+        mPackageSafeName.append(packageConfigStr);
     }
 }
 
diff --git a/tools/aapt/ApkBuilder.h b/tools/aapt/ApkBuilder.h
index db23c84..0d7f06b 100644
--- a/tools/aapt/ApkBuilder.h
+++ b/tools/aapt/ApkBuilder.h
@@ -95,6 +95,10 @@
         return mDirName;
     }
 
+    const android::String8& getPackageSafeName() const {
+        return mPackageSafeName;
+    }
+
     bool isBase() const {
         return mIsBase;
     }
@@ -111,6 +115,7 @@
     const bool mIsBase;
     String8 mName;
     String8 mDirName;
+    String8 mPackageSafeName;
     std::set<OutputEntry> mFiles;
 };
 
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index 2401b3a..010d59b 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -937,8 +937,8 @@
     }
 
     // Add the 'split' attribute which describes the configurations included.
-    String8 splitName("config_");
-    splitName.append(split->getDirectorySafeName());
+    String8 splitName("config.");
+    splitName.append(split->getPackageSafeName());
     manifest->addAttribute(String16(), String16("split"), String16(splitName));
 
     // Build an empty <application> tag (required).