Обфускация Cordova android 5.1.1 APK с путаницей proguard

С такими инструментами, как dex2jar и jdgui2, очень легко проверить содержимое APK.

Мы пытаемся использовать Proguard в нашем проекте Cordova для «защиты» нескольких классов, которые содержат информацию, которую мы хотим сохранить в секрете (в основном это ключи для расшифровки некоторого контента, который мы пытаемся защитить для нашего клиента).

Мы не можем понять это правильно. Приложение аварийно завершает работу или оно не запутано.

Мы добавили в наш build.gradle:

buildTypes {
   release {
      signingConfig signingConfigs.release
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
           }
}

Наш proguard.pro содержит:

-keep class !com.smartmobilesoftware.** ( *; }

smartmobilesoftware — это плагин inAppPurchases.

В этом пакете мы изменили несколько классов, которые отлично работают без proguard.

Я обнаружил следующее «Отсутствует поддержка Proguard»: https://issues.apache.org/jira/browse/CB- 9269

Здесь Джо Боузер утверждает следующее: «Хорошо, вам не следует использовать ProGuard с Cordova, или, по крайней мере, нет веских причин для его использования, поскольку вы не можете использовать его с minifyEnabled, что на самом деле заставляет ProGuard работать правильно. Поскольку Cordova повсеместно использует Reflection, это хороший способ взорвать Cordova без файла proguard-rules.pro».

Мы попытались избежать этой проблемы, сказав proguard, что ВСЕ классы следует оставить нетронутыми, кроме классов в com.smartmobilesoftware (-keep class !com.smartmobilesoftware.** ( *; })

Я не уверен, что это проблема с нашим кодом (но код отлично работает без proguard), плагином или самим proguard.

Значимых ошибок мы не видим.

Мы выпускали приложения перед сборкой с помощью Cordova 2.2.0, в которой использовались ANT, proguard и еще один подключаемый модуль, который работал нормально. Поэтому нам интересно, изменился ли Cordove в отношении proguard.

Кто-нибудь может пролить свет на этот вопрос?


person Erwin Moller    schedule 23.06.2016    source источник


Ответы (4)


Похоже, что код в пакете com.smartmobilesoftware реализует плагин Cordova. В этом случае вам нужно сохранить как минимум еще несколько классов, иначе Cordova не найдет их должным образом во время выполнения (для недавнего выпуска Cordova):

-keep class * extends org.apache.cordova.CordovaPlugin
person T. Neidhart    schedule 30.06.2016
comment
Спасибо за ответ. Я еще не мог проверить, но срок действия награды истекал, поэтому я дал ее вам. :-) Я отвечу здесь, если ваше предложение сработает. - person Erwin Moller; 04.07.2016

Приложение Cordova аварийно завершает работу после обфускации из-за основной активности, а классы Cordova будут запутаны. Таким образом, во время выполнения не удалось создать веб-просмотр, и приложение вылетит.

To resolve this you have to add :

-keep class org.apache.cordova.** {
    *;
}

-keep public class * extends org.apache.cordova.CordovaPlugin
person Praj    schedule 14.12.2016

В настоящее время для этого есть хороший плагин Cordova.

https://github.com/greybax/cordova-plugin-proguard

Это сработало для меня из коробки, хотя мне пришлось добавить эту строку, чтобы предотвратить ошибки сборки:

-dontwarn com.google.android.gms.**
person Kanarie    schedule 30.07.2019
comment
Автор этого плагина здесь! большое спасибо, что поделились! Было бы неплохо, если бы вы отправили PR, как вы исправляете ошибки сборки;) - person Alex Filatov; 28.11.2019

@Erwin Moller Для этой проблемы вам может потребоваться защитить как можно меньше файлов от обфускации, поэтому здесь вы можете попробовать ниже правила proguard и попробовать запустить его. Удачи

-keep class org.apache.cordova.engine.** { *; }
-keep public class * extends org.apache.cordova.CordovaPlugin
person Surya    schedule 29.11.2017