title: Proguard makes reflection with the R class in android application no longer work
body: <p>I have activated proguard in my project since I am trying to release this on Google Play. Even though proguard-android.txt has </p>
  
  <pre><code>-keepclassmembers class **.R$* {
  public static &lt;fields&gt;;
  </code></pre>
  
  <p>}</p>
  
  <p>which means it should not obfuscate the R.raw class that I need, I find that when running this code</p>
  
  <pre><code>import headwayEnt.Blackhole_Darksun.R;
  
  private static final String RES_PATH = "headwayEnt.Blackhole_Darksun.R";
  
  public static int getFileHandle(String fileName, String path) {
      String fullPath = RES_PATH + '$' + path;
      if (subClass == null) {
          Class&lt;headwayEnt.Blackhole_Darksun.R&gt; c = null;     
          try {
              c = (Class&lt;R&gt;)Class.forName(RES_PATH);
          } catch(ClassNotFoundException e) {
              e.printStackTrace();
          } catch(ClassCastException e) {
              e.printStackTrace();
          }
          subClass = c.getDeclaredClasses();
      }
      int fileHandle = 0;
      try {
          int i = 0;
          System.out.println("fullPath: " + fullPath + " subclass len: " +
                  subClass.length);
          for (; i &lt; subClass.length; ++i) {
              String name = subClass[i].getName();
              if (subClass[i].getName().equals(fullPath)) {
                  break;
              }
          }
          System.out.println("found i: " + i);
          Field[] f = subClass[i].getDeclaredFields();
          for (i = 0; i &lt; f.length; ++i) {
              if (f[i].getName().equals(fileName)) {
                  break;
              }
          }
  
          try {
              fileHandle = f[i].getInt(null);
          } catch(IllegalAccessException e) {
  
          }
      } catch (RuntimeException e) {
          System.out.println("Could not find filename: " + fileName + 
                  " with path: " + path);
          throw e;
      }
      return fileHandle;
  }
  </code></pre>
  
  <p>with path raw for example and a filename from there I get an ArrayIndexOutOfBoundsException at line</p>
  
  <pre><code>Field[] f = subClass[i].getDeclaredFields();
  </code></pre>
  
  <p>since subClass.length is 0.</p>
  
  <p>This thing works just fine if not obfuscating so I figured that the problem is with proguard.</p>
  
  <p>I tried playing with different ways to make it not obfuscate the R classes like this:</p>
  
  <pre><code>-keep public class headwayEnt.HotshotEngine.Resource.ENG_Resource { *; }
  -keep class headwayEnt.HotshotEngine.** { *; }
  -keep class **.R$*
  -keep public class headwayEnt.Blackhole_Darksun.R { *; }
  -keep public class headwayEnt.Blackhole_Darksun_Full.R { *; }
  -repackageclasses ''
  -keep public class **.R {
    public *;
  }
  -keep public class **.R$* {
    public *;
  }
  </code></pre>
  
  <p>and still doesn't work.</p>
  
  <p>I must mention that all of my code is in a library (headwayEnt.Blackhole_Darksun) and that I reference that library in headwayEnt.Blackhole_Darksun_Full. Basically I am building two versions from the same code, one for full version and one for the free demo. All this obfuscation happens in the application, not in the referenced library (just to be clear).</p>