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);
            }
          }
        }
      }
    }
  }
private void addMissingStyleableAttributes(PackageResourceTable resourceTable, Class<?> rClass) {
    for (Class innerClass : rClass.getClasses()) {
      if (innerClass.getSimpleName().equals("styleable")) {
        String styleableName = null; 
        int[] styleableArray = null; 
        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);
            }
          }
        }
      }
    }
  }
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 ) ; } } } } } }
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.
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 .