Android:在我的Java代码中放置一个敏感的string是否安全?

我的应用程序使用了许多API密钥和URL,我不能让用户看到。 我一直把它们直接放在代码中,有时embedded在使用它们的方法中,有时在一个名为MyVals的类中存储常用的string和数字。

例如:

public class MyVals { private LGVals(){} public static final String DB_URL = "https://mydb.dbprovider.org/"; public static final String DB_Key = "klJF*(oh8iyhkkde"; public static final String TableKey_UserList = "o9w6owifhayf98fnwihj"; } 

这安全吗? 如果我正在使用Proguard创buildAPK,它会有所作为吗? 最佳做法是什么?

  • Android - Proguard没有用Joda Time jar文件编译
  • 适用于v7支持库ActionBar的Android Proguard配置
  • 如何为Jackson JSON处理器设置PROGUARD?
  • Proguard忽略了库的配置文件
  • 如何在我的Android库(AAR)中包含proguard配置
  • 使用ProGuard进行混淆时,是否使用SourceFile和LineNumberTable属性来使得apk更容易反向工程?
  • Proguard是否保证提供相同的映射,如果没有来源改变?
  • ProGuard的Android代码混淆...如何知道它被混淆了?
  • 将敏感stringembedded代码是绝对不安全的。 Proguard混淆了类和方法名称,但是任何定义的string保持完全不变。 以下是我通过Proguard运行的应用程序的一个示例。 您可以看到方法和类名称被混淆,但string(因为它们必须是)不变。

    这是原始代码:

     public void shutdown() { if (logger.logDebug()) { logger.logDebug(LOGTAG, "Queuing shutdown message ..."); } queueMessage(new BaseMessage(true)); } 

    而由JD-GUI轻易获得的混淆代码:

      public void c() { if (c.logDebug()) c.logDebug("MsgRouter", "Queuing shutdown message ..."); a(new a(true)); } 

    如果您在应用程序中将敏感数据embedded到string中, 则可以并将其反编译

    不,这不安全。

    您至less应该将信息放入SharedPreferences中。

    但是,任何有root权限的人都可以阅读。