code: private void addMissingStyleableAttributes(PackageResourceTable resourceTable, Class<?> rClass) {
      for (Class innerClass : rClass.getClasses()) {
        if (innerClass.getSimpleName().equals("styleable")) {
          String styleableName = null; // Current styleable name
          int[] styleableArray = null; // Current styleable value array or references
          for (Field field : innerClass.getDeclaredFields()) {
            if (field.getType().equals(int[].class) && Modifier.isStatic(field.getModifiers())) {
              styleableName = field.getName();
              try {
                styleableArray = (int[]) (field.get(null));
              } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
              }
            } else if (field.getType().equals(Integer.TYPE) && Modifier.isStatic(field.getModifiers())) {
              String attributeName = field.getName().substring(styleableName.length() + 1);
              try {
                int styleableIndex = field.getInt(null);
                int attributeResId = styleableArray[styleableIndex];
                resourceTable.addResource(attributeResId, "attr", attributeName);
              } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
              }
            }
          }
        }
      }
    }
docs: Check the stylable elements. Not for aapt generated R files but for framework R files it is possible to
  have attributes in the styleable array for which there is no corresponding R.attr field.