3

我有一个使用 nutiteq OSM 地图、mapsforge 渲染器和存储在 assets 文件夹中的地图文件的 Android 应用程序。它在没有 proguard 的情况下完美运行,但经过混淆后,应用程序冻结,没有任何日志信息。

在 proguard.cfg 中:

-keep class com.nutiteq.** { ; } -keep class org.mapsforge.* { *; }

但即使我保留了包中的所有代码,也无济于事。

任何想法?

谢谢

索西

更新

没有无关信息。

proguard.cfg:

-printmapping proguard.map

-keepattributes SourceFile,LineNumberTable,*Annotation*,Signature

#-optimizationpasses 5
-dontpreverify

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers

-libraryjars /libs/mapsforge-map-0.3.1-with-dependencies.jar
-libraryjars /libs/nineoldandroids-2.4.0.jar
-libraryjars /libs/nutiteq-3d-sdk-2.3.0.jar

-verbose

#Libraries
-keep class com.google.protobuf.** { *; }
-keep class com.nutiteq.** { *; }
-keep class org.mapsforge.** { *; }
-keep class mypackage.util.MapsforgeRasterDataSource.** { *; }
4

2 回答 2

1

终于,找到了解决办法。Proguard 从代码中删除所有日志,但 nutiteq 使用自己的日志方法......也被删除。如果您保留日志,一切正常。

谢谢回复。

于 2014-07-21T09:16:43.163 回答
1

您使用的是 nutiteq 和 mapsforge 的源代码,还是 jar 文件?如果您使用 jar 文件,您可以将它们定义为 proguard 中的 libraryjar 而不是 injar。一个例子:

proguard.cfg
-injars build\myproject.jar
-injars build\myOtherProject.jar
-outjars proguard\obfuscated
-libraryjars nutiteq.jar
-libraryjars mapsforge.jar
...
...
...

这样,proguard 可以跟踪您的代码对第三方库的引用,但不会费心尝试不必要地混淆它们。

于 2014-07-17T14:29:39.537 回答