Phonegap 2.4 Конфигурация Android Proguard

Я обновил сборку с Phonegap (Cordova) 2.0 до 2.4, и в dev все работало нормально, пока я не пришел к тестированию финального релиза apk. Что я обнаружил после того, как много времени было потрачено впустую, так это то, что по какой-то причине сейчас, когда я запускаю сборку, моя конфигурация proguard каким-то образом нарушает сборку phonegap, что означает, что когда она запускается, deviceready никогда не вызывается. Кажется, нет никаких ошибок ни при сборке, ни при запуске, и ничего, насколько я вижу, но я предполагаю, что что-то тихо выходит из строя в кордове js, поскольку я не получаю ошибок компиляции/журнала на устройстве.

Как я уже сказал, это ТОЛЬКО при запуске obfs Proguard в процессе сборки. Если я отключу Proguard, все будет работать нормально. Я вернул весь свой код обратно к 2.0, чтобы быть уверенным, и все в порядке, поэтому где-то по пути произошло стабильное изменение, которое, по-видимому, не задокументировано / или еще никто не ударил (2.4 вышла только несколько недель назад - в время написания 26 февраля 2013 г.).

Моя конфигурация Proguard содержит следующее для phonegap (а также некоторые другие стандартные конфигурации):

-keep public class * extends com.phonegap.api.Plugin
-keep public class * extends org.apache.cordova.api.Plugin
-keep public class org.apache.cordova.DroidGap
-keep public class org.apache.cordova.**
-keep public class org.apache.**
-dontwarn android.webkit.*
-dontwarn org.apache.**

и декомпиляция dex, кажется, не проливает света - на первый взгляд все выглядит нормально...

Есть у кого идеи???


person phil.fuse    schedule 26.02.2013    source источник
comment
случайный не связанный (?) вопрос: почему вы используете DroidGap, а не CordovaWebView?   -  person Edward van Raak    schedule 26.02.2013
comment
Это может быть способом исследовать @Edward ... Мое приложение расширяет DriodGap - поскольку оно существовало еще до версии 2.0 (я думаю). Конфигурация proguard -keep public org.apache.cordova, которую я получил из других сообщений о проблемах с proguard и phonegap. Приложение запускается нормально и загружает правильные URL-адреса, но проблема возникает только при загрузке js.   -  person phil.fuse    schedule 26.02.2013
comment
вы можете использовать плагин Cordova proguard alfilatov.com/posts/< /а>   -  person Alex Filatov    schedule 22.11.2020


Ответы (2)


Попробуйте заменить настройки «сохранения» Cordova в вашем файле proguard-project.txt следующей строкой, которая должна поддерживать все классы, поля и методы Cordova, как общедоступные, так и частные (и, таким образом, повторно активировать устройство):

-сохранить класс org.apache.cordova.** { *; }

Затем вам просто нужно включить свой класс (классы) (предположительно, расширяющий CordovaPlugin, а не только плагин), например.

до версии 3:

-keep public class * extends org.apache.cordova.api.CordovaPlugin

v3+:

-keep public class * extends org.apache.cordova.CordovaPlugin
person Steve Hansen Smythe    schedule 11.03.2013
comment
Вы чемпион! Мне это не приходило в голову до сих пор. - person AppleGrew; 05.07.2013

Плагины Phonegap исключаются из окончательного APK, я думаю. Cordova.js, вероятно, даже не существует, чтобы выдавать ошибки.

person Edward van Raak    schedule 26.02.2013
comment
js включается вручную и размещается на сервере... Я собираюсь начать пошаговое выполнение кода JS, чтобы точно определить, где и когда он терпит неудачу. Вы вполне можете быть правы в том, что, возможно, плагин отсутствует/переименован, когда запутывается, а JS молча терпит неудачу. У меня он также работает через Weinre, но опять же, не сообщает об ошибках js синтаксического анализа/времени выполнения. - person phil.fuse; 26.02.2013