2016-06-26 31 views
1

Ich habe eine Bibliothek, die von Apps konsumiert wird. Dieses Modul hat Schnittstellen und Hilfsklassen.Verschleierung eines Moduls/einer Bibliothek

Wie kann ich das ganze Modul verschleiern, aber trotzdem Zugriff auf alle diese Schnittstellen und Hilfsklassen erlauben? diese

Ich habe versucht:

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

Dann fand ich mich --keep auf allen meinen Klassen in proguard zu tun. Gibt es etwas, das ich Pro Guard hinzufügen kann, damit ich all diese Interfaces/Helfer-Klassen behalten kann und es immer noch wie verschleiert habe?

Antwort

0

Wenn Sie nur verhindern möchten, dass die öffentliche API Ihrer Bibliothek verschleiert wird, müssen Sie diese öffentliche API angeben. Es gibt verschiedene Ansätze für Bibliotheken:

  1. Ein separates Paket für öffentliche API und tatsächliche Implementierungen, z.B. com.example.library enthält die öffentliche API, während com.example.library.internal die tatsächlichen Implementierungen enthält, die ausgeblendet sind.

  2. Machen Sie den tatsächlichen Implementierungen Paket Privat

Die ProGuard Regeln dann würde wie folgt aussehen:

-keep public class com.example.library.* { public protected *; } 

Das einzige öffentliche Klassen zusammen mit ihren öffentlichen oder geschützten Methoden/Felder halten in das Paket com.example.library.