首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Greystripe和proguard

Greystripe和proguard
EN

Stack Overflow用户
提问于 2013-07-19 22:00:29
回答 3查看 926关注 0票数 0

因此,我们已经到了Android游戏开发的最后阶段,是时候对Proguard进行一些混淆了。

我们的游戏使用的是Greystripe广告,在编译调试版本时一切正常,目标是API7。

但在编译发布版本时(在过程中添加了Proguard ),会有大量的警告:

代码语言:javascript
复制
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.DeviceInfo: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced class android.hardware.Camera$CameraInfo
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced class android.hardware.Camera$CameraInfo
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced method 'void getCameraInfo(int,android.hardware.Camera$CameraInfo)' in class android.hardware.Camera
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced method 'int getNumberOfCameras()' in class android.hardware.Camera
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced method 'android.hardware.Camera open(int)' in class android.hardware.Camera
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced method 'void setDisplayOrientation(int)' in class android.hardware.Camera
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced class android.hardware.Camera$CameraInfo
Warning: com.greystripe.sdk.GSFullscreenActivity: can't find referenced method 'void setLayerType(int,android.graphics.Paint)' in class com.greystripe.sdk.aa
Warning: com.greystripe.sdk.a: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.a: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.ah: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.aj: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.aj: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.aj: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.as: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.as: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.as: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.as: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.as: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.at: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.at: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bd: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.be: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.be: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.be: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.be: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.be: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.be: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bh: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bh: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bl: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bl: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bl: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bl: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.bl: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.m: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.s: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.s: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: com.greystripe.sdk.w: can't find referenced class android.webkit.JavascriptInterface
Warning: there were 64 unresolved references to classes or interfaces.
     You may need to specify additional library jars (using '-libraryjars').
Warning: there were 5 unresolved references to program class members.
     Your input classes appear to be inconsistent.
     You may need to recompile them and try again.
     Alternatively, you may have to specify the option 
     '-dontskipnonpubliclibraryclassmembers'.

所以很明显,我开始尝试了-keep class-keep public class等许多不同的变体,但都没有任何效果。然后我开始用谷歌搜索,发现了很多论坛帖子,人们都有类似的问题,我尝试了所有人们回复的建议。仍然没有变化。

然后我看了看android.jar,发现android.webkit.JavascriptInterface并没有在API17之前引入,这当然是有意义的。因为我的目标是API7,所以自然没有可用的android.webkit.JavascriptInterface

但我不想仅仅因为广告就瞄准API 17,我也非常确定我也不应该这样做。

从逻辑上讲,我认为我应该能够只使用-dontwarn,但这样做会导致应用程序在加载时崩溃。

当然,我确保将-libraryjars /path/to/libs/greystripe-android-sdk-2.3.0.jar/path/to/android.jar

有谁对此有什么线索吗?我如何混淆我的应用程序,同时离开greystripe-sdk jar?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-20 07:08:45

读完输入后,ProGuard会立即打印这些警告,所以-keep选项不会有任何帮助。您应该根据API17进行构建,这样ProGuard就可以找到分析和处理应用程序所需的所有类。您仍然可以在AndroidManifest.xml中指定不同的目标。

如果您正在使用标准的Ant/Eclipse/Gradle构建,则不应该指定-libraryjars,因为这些构建已经为您完成了这项工作。

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 06:40:58

将以下内容添加到ProGuard文件中:

-keep class com.greystripe.** { *; }

这应该会消除警告,并允许Greystripe SDK按预期运行。

如果由于某种原因,这行代码不能修复它,可以尝试这样做:

-keep class com.greystripe.** { *; }

-keepclassmembers class com.greystripe.** { public *; }

票数 1
EN

Stack Overflow用户

发布于 2013-07-20 16:53:28

虽然我现在没有时间来测试它(我还有一堆其他的事情要做),但我想在它还在我脑海中的时候把它写在这里。然后,我们将在稍后看到它是否成为解决方案。

重要的是要记住: targetSdkVersion与build版本不同。

在使用Greystripe类的情况下,它们显然会测试某些Android类是否存在,这些类只在API 17之后才可用,您应该将构建目标设置为API 17。这意味着您将使用API 17中提供的类进行编译。因此,Proguard不应给出警告。

不过,在您的AndroidManifest.xml文件中,您不必将targetSdkVersion=放入“17”。您可以将其设置为任何您想要的目标。(尽管由于ICS和菜单按钮问题,建议始终以API 14或更高版本为目标)。

因此,最优设置(理论上,必须稍后测试)现在就是设置

build target = API 17 -避免出现警告,因为Greystripe API引用了API 17 sdkTargetVersion >= 14中的类-因为兼容性问题。将其设置为您可以在minTargetVersion =7上测试的应用程序接口版本(如果您的应用程序将在API7上运行)-因为根据文档,Greystripe API应该在API7上运行

那么一切都应该能正常工作。

更多(半)相关阅读:http://simonvt.net/2012/02/07/what-api-level-should-i-target/ http://developer.android.com/guide/topics/manifest/uses-sdk-element.html https://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ICE_CREAM_SANDWICH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17748044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档