使用 CORBA 混淆 Android 应用程序
Posted
技术标签:
【中文标题】使用 CORBA 混淆 Android 应用程序【英文标题】:Obfuscating Android app with CORBA 【发布时间】:2011-03-25 13:14:58 【问题描述】:结果我在我的 android 应用程序中使用了 jacorb.jar 和 CORBA 接口。当我尝试使用 Proguard 混淆代码时,会收到很多类似这样的警告:
[proguard] Warning: org.jacorb.orb.standardInterceptors.SASComponentInterceptor: can't find referenced
class org.ietf.jgss.Oid
结果:
[proguard] Warning: there were 1223 unresolved references to classes or interfaces.
[proguard] You may need to specify additional library jars (using '-libraryjars'),
[proguard] or perhaps the '-dontskipnonpubliclibraryclasses' option.
[proguard] Warning: there were 33 unresolved references to program class member
s.
[proguard] Your input classes appear to be inconsistent.
[proguard] You may need to recompile them and try again.
[proguard] Alternatively, you may have to specify the options
[proguard] '-dontskipnonpubliclibraryclasses' and/or
[proguard] '-dontskipnonpubliclibraryclassmembers'.
我的 proguard.cfg :
-injars bin/classes
-outjars bin/classes-processed.jar
-libraryjars C:/android-sdk-windows/platforms/android-7/android.jar
-libraryjars libs
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontnote
-keep class com.android.vending.billing.**
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.view.View
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
-keepclasseswithmembers class *
public <init>(android.content.Context, android.util.AttributeSet);
-keepclasseswithmembers class *
public <init>(android.content.Context, android.util.AttributeSet, int);
-keepclassmembers class * implements android.os.Parcelable
static android.os.Parcelable$Creator CREATOR;
-keepclassmembers class **.R$*
public static <fields>;
如何纠正这些警告并构建有效的 apk 文件?
【问题讨论】:
【参考方案1】:参照。 ProGuard manual > Troubleshooting > Warning: can't find superclass or interface.
Jacorb 似乎依赖于 JGSS,它不是 Android 运行时的一部分。理论上,JGSS 应该被指定为一个库包。但是,由于您的应用程序在没有 JGSS 的情况下已经可以正常运行,因此可以公平地假设这部分代码从未使用过。然后您可以关闭警告:
-dontwarn org.ietf.jgss.**
ProGuard 将不再抱怨这些缺失的类并继续处理代码。控制台输出中的摘要表明有许多类可能相似。
【讨论】:
我为我的应用程序中实际未使用的所有类添加了 -dontwarn 选项。但是另一种警告仍然存在:[proguard] Warning: org.jacorb.imr.util.AddServerWindow: can't find referenced method 'void pack()' in class org.jacorb.imr.util.AddServerWindow
这些类保存在 libs/jacorb.jar 中。我使用-keepclasseswithmembers class org.jacorb.**
,但没有效果。
参照。 ProGuard 手册 > 故障排除 > 警告:找不到引用的字段/方法。您是否尝试过 -dontskipnonpubliclibraryclasses(在旧版本的 ProGuard 中)和 -dontskipnonpubliclibraryclassmembers?
我尝试单独和一起使用这个选项(我在一个问题中写过)。如果我只是忽略这些警告(使用 -ignorewarnings
-dontshrink
-dontoptimize
选项)应用程序服务将无法启动。
谢谢你,埃里克!问题解决了。这些警告并不重要。我对所有使用 corba 接口的类都使用了 -ignorewarnings
和 -keep
选项。并且混淆的应用程序可以正常工作。以上是关于使用 CORBA 混淆 Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 proguard 的 Android 混淆应用程序会不断混淆库 jar - 是吗?
如何使用 Dotfuscator 混淆 Xamarin.Android 应用程序的公共成员?