Android: Можно ли помещать чувствительную строку в код Java?

В моем приложении используется несколько ключей API и URL-адресов, которые я не могу разрешить пользователям. Я помещал их непосредственно в код, иногда внедряемый в метод, который их использует, а иногда и в класс MyVals, в котором хранятся обычно используемые строки и номера.

например:

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"; } 

Это безопасно? Разве это имеет значение, если я создаю свой APK с Proguard? Для чего лучше всего?

Solutions Collecting From Web of "Android: Можно ли помещать чувствительную строку в код Java?"

Совершенно небезопасно вставлять в свой код чувствительные строки. Proguard обфускает имена классов и методов, но любые определенные строки остаются неизменными. Вот пример из приложения, которое я пропустил через Proguard. Вы можете видеть, что имена методов и классов запутаны, но строки (как они должны быть) не изменяются.

Вот исходный код:

 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)); } 

Если вы вставляете конфиденциальные данные в строку в своем приложении, она может и будет декомпилирована .

Нет, это не безопасно.

Вы должны по крайней мере помещать информацию в SharedPreferences.

Но тем не менее, любой, кто имеет корневой доступ, мог бы их прочитать.