我正在使用反射调用一个超出我的Android应用程序的目标API级别的方法:
try {
Method m = Class.forName("android.content.Context")
.getDeclaredMethod("getExternalCacheDir");
Object result = m.invoke(this);
if (result instanceof File) {
Log.v("MyApp", "external cache: "
+ ((File) result).getAbsolutePath());
cacheDirectory = (File) result;
} else {
Log.v("MyApp", "non-file cache: " + result);
}
} catch (Exception e) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我可以通过Proguard毫无问题地优化它,但它警告我:
Note: com.example.MyApp accesses a declared method 'getExternalCacheDir()' dynamically
Maybe this is library method 'android.content.Context { java.io.File getExternalCacheDir(); }'
Maybe this is library method 'android.content.ContextWrapper { java.io.File getExternalCacheDir(); }'
Maybe this is library method 'android.test.mock.MockContext { java.io.File getExternalCacheDir(); }'
Note: there were 1 accesses to class members by means of introspection.
You should consider explicitly keeping the mentioned class members
(using '-keep' or '-keepclassmembers').
Run Code Online (Sandbox Code Playgroud)
这是一个实际问题,还是Proguard只是告诉我一个潜在的问题?
小智 5
这与Paul Lammertsma发布的答案类似.另请参阅ProGuard Eric Lafortune的答案作者:如何抑制来自ProGuard的'可能这是程序方法'警告
您可以通过在配置中明确提及方法来避免它:
-keep class com.foo.OtherClass { com.foo.OtherClass getInstance(); }或者,您可以抑制班级的注释:
-dontnote com.foo.MyClass
| 归档时间: |
|
| 查看次数: |
7193 次 |
| 最近记录: |