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 .