gpt4 book ai didi

android - 在 android 库项目中停止混淆破坏注释

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:19 25 4
gpt4 key购买 nike

我在我的游戏中使用 GREE sdk 进行社交 Activity 。在导出已签名的 apk 时,proguard 弄乱了 GREE sdk 中的一些自定义注释。 (我在我的游戏中使用 GREE sdk 作为库项目)

如果我不向 proguard 配置添加任何内容。它也混淆了 GREE SDK,当我尝试安装和运行游戏时,它抛出“注入(inject)(gree sdk 中的自定义注释)”缺少注释异常。

首先我添加了这个 keep 语句来跳过整个 GREE SDK 的混淆。

-keep class net.gree.** {
public protected private *;
}

这帮助我避免了 sdk 代码被混淆,但“注释”仍然被删除,我仍然收到同样的异常。

然后我尝试一个一个地添加这个 -keepattributes 语句,但没有一个对我有帮助。

a) -keepattributes *Annotation*
b) -keepattributes Inject
c) -keepattributes net.gree.asdk.core.inject.Inject
d) -keepattributes @net.gree.asdk.core.inject.Inject

(d) 选项抛出找不到文件/CLASSPATH OF PRJECT/net.gree.asdk.core.inject.Inject

这是我的 proguard 配置文件:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keepattributes *Annotation*

-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-dontwarn org.mockito.cglib.**
-dontwarn sun.reflect.**
-dontwarn android.test.**


-keepclasseswithmembernames class * {
native <methods>;
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

-keep class net.gree.** {
public protected private *;
}

我试图摆脱的异常:

11-06 12:25:41.718: E/AndroidRuntime(10764): java.lang.RuntimeException: Unable to create application com.mygame.Application: java.lang.RuntimeException: Could not find a suitable constructor in net.gree.asdk.core.track.TrackItemStorageImpl. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4154)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.app.ActivityThread.access$1300(ActivityThread.java:130)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.os.Looper.loop(Looper.java:137)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-06 12:25:41.718: E/AndroidRuntime(10764): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 12:25:41.718: E/AndroidRuntime(10764): at java.lang.reflect.Method.invoke(Method.java:511)
11-06 12:25:41.718: E/AndroidRuntime(10764): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-06 12:25:41.718: E/AndroidRuntime(10764): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-06 12:25:41.718: E/AndroidRuntime(10764): at dalvik.system.NativeStart.main(Native Method)
11-06 12:25:41.718: E/AndroidRuntime(10764): Caused by: java.lang.RuntimeException: Could not find a suitable constructor in net.gree.asdk.core.track.TrackItemStorageImpl. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.inject.Binder.getConstructorOf(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.inject.Binder.createInstance(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.inject.Binder.getOrCreateInstance(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.inject.Binder.createInstance(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.inject.Binder.finishBinding(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.inject.InternalInjector.createInjector(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.Injector.init(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.core.Core.initialize(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at net.gree.asdk.api.GreePlatform.initialize(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at com.aqif.speedymind.application.SpeedyApplication.onCreate(Unknown Source)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999)
11-06 12:25:41.718: E/AndroidRuntime(10764): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151)

最佳答案

您应该在混淆器文件中添加一些配置,以使用 Inject 注释保留带注释的类(构造函数和字段):

 # keeps all fields and Constructors with @Inject
-keepclassmembers,allowobfuscation class * {
@com.google.inject.Inject <fields>;
@com.google.inject.Inject <init>(...);
}

关于android - 在 android 库项目中停止混淆破坏注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com