Seb*_*giu 6 java android release proguard
我已经在我的项目中激活了proguard,因为我试图在Google Play上发布它.即使proguard-android.txt有
-keepclassmembers class **.R$* {
public static <fields>;
Run Code Online (Sandbox Code Playgroud)
}
这意味着它不应该混淆我需要的R.raw类,我发现在运行这段代码时
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<headwayEnt.Blackhole_Darksun.R> c = null;
try {
c = (Class<R>)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 < 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 < 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;
}
Run Code Online (Sandbox Code Playgroud)
例如,路径原始和文件名从那里我得到一个ArrayIndexOutOfBoundsException行
Field[] f = subClass[i].getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)
因为subClass.length是0.
如果没有混淆,这个东西工作正常,所以我认为问题在于proguard.
我尝试用不同的方法来使它不像这样混淆R类:
-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 *;
}
Run Code Online (Sandbox Code Playgroud)
仍然无法正常工作.
我必须提到我的所有代码都在一个库(headwayEnt.Blackhole_Darksun)中,并且我在headwayEnt.Blackhole_Darksun_Full中引用该库.基本上我从相同的代码构建两个版本,一个用于完整版,一个用于免费演示.所有这些混淆都发生在应用程序中,而不是在引用的库中(只是为了清楚).
Eri*_*une 20
这应该工作:
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
<fields>;
}
Run Code Online (Sandbox Code Playgroud)
该InnerClasses属性是获取任何内容所必需的Class$getDeclaredClasses().-keep选项是保持相关类和字段及其原始名称所必需的.
| 归档时间: |
|
| 查看次数: |
4132 次 |
| 最近记录: |