2016-10-14 6 views
6

나는 내 응용 프로그램에서 사용되는 여러 라이브러리를 가지고 있고 minifyEnabledtrue을 후, 그것은 APK를 생성 할 수 없습니다. 몇 가지 연구가 끝나면 규칙을 찾아서 .pro 파일에 하나씩 추가합니다. 여기 안드로이드에 proguard 규칙을 설정하면 코드를 암호화 할 수 있습니까?

가 JAR에 대한 라이브러리 목록

compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:23.1.0' 
compile 'com.squareup.picasso:picasso:2.3.2' 
compile 'com.nineoldandroids:library:2.4.0' 
compile 'com.daimajia.slider:library:1.[email protected]' 
compile 'org.apache.httpcomponents:httpmime:4.3.5'//Volley 
compile 'org.apache.httpcomponents:httpcore:4.2.4'//Volley 
compile 'com.mcxiaoke.volley:library:1.0.17'//Volley 
compile 'com.github.bumptech.glide:glide:3.6.1'//Gradle 
compile 'com.baoyz.swipemenulistview:library:1.3.0'//Swipe Menu li stview 
compile 'org.lucasr.twowayview:twowayview:0.1.4' //horizontal listview 
compile 'com.android.support:recyclerview-v7:+' 

, 그것은 나는 그것이 어떤 라이브러리로, 라이브러리에 대해 하나 규칙 하나를 추가 할 수 없습니다 수 있을까, 짧은에서 PayPalAndroidSDK-2.9.11.jar

입니다 어떻게 그들을 위해 프로 가드를 설치하는 방법에 대해 언급하지 않는 것 같아? 코드를 최적화하고 유용한 코드를 스트라이프하는 대신 암호화 할 수 있습니까?

고마워요. 궁금

+1

Proguard와는 ** ** 모든 코드를 암호화하지 않습니다. 암호화 기능이 없습니다. 당신을 혼란 죄송 –

+1

, 어떻게 https://github.com/yongjhih/android-proguards 또는 https://github.com/krschultz/android-proguard-snippets 사용에 대한 대신 암호화 코드 – user782104

+2

의 난독 코드를해야하나요? –

답변

8

그것은 일부 도서관은 그들을 위해 설치하는 방법 난독 화에 대해 언급하지 않는 것 같이 제 규 라이브러리 하나 하나를 추가하지 않을 수 있습니까?

예 가능합니다. 프로젝트에서 사용한 각 라이브러리에 대해 하나씩 규칙을 추가하지 마십시오. proguard-rules.pro 파일에 다음을 추가하십시오.

-keep class !com.example.myproject.** { *; } 

귀하의 proguard-rules.pro에서 사용하는 정규 표현식에 부정을 넣는 것입니다.

은 그러나 당신이 당신의 코드를 난독하지 않는 경우 난독 화를 사용하는 시점거야. 난독 처리 후에도 프로젝트의 일부 클래스를 변경하지 않을 수 있습니다. 다른 라이브러리와 마찬가지로 보관해야합니다. 예를 들어 -

어쨌든
// I want to keep the classes in the `Models` package to remain unchanged 
-keep class com.example.myproject.Models.** { *; } 
-keepclassmembers class com.example.myproject.Model.** { *; } 

, 매우 어려운 일이 아니다은 난독 동안을보다 효율적으로 관리 할 수 ​​있습니다로 하나의 규칙 하나를 추가 할 수 있습니다. 여기 내 proguard-rules.pro입니다. 당신은 그것을 볼 수 있습니다.

-useuniqueclassmembernames 
-allowaccessmodification 
-keep class com.google.** { *; } 
-keep class com.journeyapps.** { *; } 
-keep class com.makeramen.** { *; } 
-keep class com.github.** { *; } 
-keep class org.apache.** { *; } 
-keep class com.flipboard.** { *; } 
-keep class com.android.** { *; } 
-keep class com.mikepenz.** { *; } 
-keep class junit.** { *; } 
-keep class org.mockito.** { *; } 
-keep class android.support.v7.widget.SearchView { *; } 
-keep class com.example.myproject.Models.** { *; } 
-keepclassmembers class com.example.myproject.Model.** { *; } 

-keepattributes Signature 
-keepattributes *Annotation* 

-dontwarn com.google.** 
-dontwarn org.apache.** 
-dontwarn android.support.** 
-dontwarn org.junit.** 
-dontwarn org.mockito.** 
-dontwarn com.makeramen.** 

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
    public static *** w(...); 
    public static *** i(...); 
    public static *** e(...); 
} 
1

최소화하지 않고 난독 화하려면 -dontshrink 옵션을 사용할 수 있습니다. @Reaz Murshed가 그의 대답에서 한 주장과 마찬가지로 각 라이브러리에 대해 proguard를 올바르게 구성하는 것이 좋습니다. 때로는 성가신 일이 될 수 있지만 shirnking은 소규모 APK 및 방법 수를 줄임으로써 확실한 이점을 제공합니다.

3

당신은 그냥 난독 규칙을 추가하지 않습니다 수 있지만, 응용 프로그램 또는 라이브러리의 일부가 반사를 사용하는 경우, 제네릭, 의존성 삽입 (Dependency Injection) 또는 소프트/간접 참조의 형태는 응용 프로그램이 충돌합니다. 따라서 가장 좋은 방법은 앱을 한 번 빌드하고 모든 것을 테스트 한 다음 무언가가 kaboom으로 이동하는지 확인하는 것입니다. 그렇다면 각 라이브러리에 대한 proguard 참조를 추가하십시오. 라이브러리에 권장 구성이없는 경우 사전에 logcat의 괴롭힘을 확인하십시오 (outputs/proguard).