2015-10-06 21 views
16

Tôi đã cố tạo APK bằng cách sử dụng trình bảo vệ, nhưng tôi gặp lỗi này khi cố gắng tạo:com.google.android.gms.internal.zzhu: không thể tìm thấy lớp được tham chiếu android.security.NetworkSecurityPolicy

Warning: com.google.android.gms.internal.zzhu: can't find referenced class android.security.NetworkSecurityPolicy 

Warning: there were 3 unresolved references to classes or interfaces. 
You may need to add missing library jars or update their versions.   If your code works fine without the missing classes, you can suppress   the warnings with '-dontwarn' options. 

(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) 
:app:proguardRelease FAILED 
Error:Execution failed for task ':app:proguardRelease'. 
java.io.IOException: Please correct the above warnings first. 

Gần đây, tôi đã nâng cấp Công cụ SDK Android của mình. Trước đó, dự án này không có vấn đề gì với proguard. Tôi thấy bài này (https://plus.google.com/+PaulBurke/posts/T3vmAnRP3q6), nơi Oliver Renner đã viết:.

"Vì vậy, về cơ bản là thư viện Google tiếp theo mà có thể không được nâng cấp lên phiên bản mới nhất này cũng dường như đòi hỏi compileSdk 23 để có thể sử dụng ProGuard mà không sửa đổi (Cảnh báo: com.google.android.gms.internal.zzhu: không thể tìm thấy lớp được tham chiếu android.security.NetworkSecurityPolicy) "*

Tôi đã cập nhật dự án của mình để biên dịch bằng SDK 23, nhưng vấn đề đã không được giải quyết.

Bellow, tôi bao gồm một số bộ phận của tập tin build.gradle tôi:

compileSdkVersion 23 
    buildToolsVersion "23.0.0" 

    defaultConfig { 
     applicationId "com.sample.sample" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0.0" 
    } 

. 
. 
. 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.0.0' 
    compile 'com.google.android.gms:play-services:+' 
    compile 'com.android.support:design:23.0.0' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
} 
+0

Bạn có thử '-dontwarn android.security **' Thêm cố gắng vô hiệu hóa tối ưu hóa với '-dontoptimize' và xem làm thế nào nó đi – ThanosFisherman

+0

Nó không hoạt động:/ –

+0

Ok hãy thử cái này: Trong tệp gradle đính kèm của bạn, trong 'buildToolsVersion" 23.0.0 "', hãy nhập 'useLibrary 'org.apache.http.legacy'' sau đây nếu nó hoạt động, tôi sẽ viết một câu trả lời chi tiết hơn về cách thức và lý do tại sao điều này làm việc – ThanosFisherman

Trả lời

18

Tôi có vấn đề này như vậy. Thông báo cảnh báo cho biết:

Nếu mã của bạn hoạt động tốt mà không có các lớp bị thiếu, bạn có thể chặn các cảnh báo bằng tùy chọn 'không đổi'.

Vì vậy, chúng ta hãy gợi ý của nó:

-dontwarn com.google.android.gms.internal.zzhu 

Đối với tôi, điều này cố định vấn đề này. Tuy nhiên, nếu vì một lý do mã của bạn không làm việc tốt mà không có lớp, bạn có thể làm một cái gì đó như thế này ngoài (không kiểm tra):

-keep class com.google.android.gms.internal.** { *; } 

Lưu ý rằng bạn sẽ cần dòng -dontwarn một trong hai cách. Chúc may mắn!

+0

Tránh thêm đường vào proguard của bạn nếu chúng không làm gì hữu ích. -keep class com.google.android.gms.internal. ** {*; } chỉ bảo proguard không làm xáo trộn các lớp trong gói mà bạn đã đề cập. Nó sẽ không giải quyết được cảnh báo vì vấn đề không phải với lớp android.gms.internal.zzhu nhưng với lớp tham chiếu android.security.NetworkSecurityPolicy từ lớp đó. Proguard chỉ không thể tìm thấy định nghĩa của lớp để nó ném một cảnh báo. Nếu bạn biết rằng lớp này (NetworkSecurityPolicy) nên có ở thời gian chạy, bạn có thể sử dụng dontwarn. – MikeL

+0

Ngoài ra tôi sẽ kiểm tra rằng lớp NetworkSecurityPolicy không bị che khuất (và do đó proguard không nhìn thấy nó) và có thể đặt một giữ nó. – MikeL

5

Đối với tôi, có vẻ như điều này thực sự do Google vô tình bao gồm AdMob trong các phụ thuộc của Play Services Analytics 8.1: https://plus.google.com/+GoogleDevelopers/posts/HsSNWEQ6H4e

Nếu tôi loại trừ các module play-services-ads trong build.gradle Tôi không nhận được lỗi Proguard với android.security.NetworkSecurityPolicy, và phát hành xây dựng của tôi cài đặt và chạy mà không có bất kỳ vấn đề (nó trước đây đã đâm khi khởi động với java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity, trong khi debug xây dựng đã làm việc tốt):

compile ('com.google.android.gms:play-services-analytics:8.1.0') { 
    exclude module: 'play-services-ads' 
} 

Trong Proguard quy tắc bạn cũng cần:

-dontwarn com.google.android.gms.ads.** 

Nhờ bài này cho detai ls (mặc dù nó không tham chiếu tới xây dựng đâm ở tất cả, chỉ apk kích thước): https://medium.com/google-developer-experts/warning-for-google-analytics-users-44b0096084e2#.4b3egtbxh

Đây là vấn đề đối với các dự án tôi đã làm việc trên, trong đó bao gồm các cam kết rằng giải quyết vấn đề: https://github.com/OneBusAway/onebusaway-android/issues/342

EDIT

người dùng được báo cáo rằng đây đã được giải quyết trong 8,3, có nghĩa là bạn có thể sửa lỗi này bằng cách thiết lập của bạn build.gradle tới:

compile 'com.google.android.gms:play-services-analytics:8.3.0'

Tôi chưa tự xác nhận.

+2

Cảm ơn bạn đã chia sẻ bài viết của tôi. – tasomaniac

+0

Sự cố này dường như được khắc phục trong 8.3.0 – yuval

+0

@yuval Cảm ơn, rất tốt! Tôi nghĩ nó có thể. Tôi sẽ kiểm tra và xác nhận bản thân mình là tốt. –

0

Đối với tôi, tôi chỉ đồng bộ hóa tất cả các mô-đun của dự án để sử dụng thư viện dịch vụ phát gần đây và tôi đã có thể sử dụng gói.

những gì tôi sử dụng trong build.gradle của tôi (cho tất cả module):

compile 'com.android.support:support-v4:23.0.1' 
compile 'com.android.support:appcompat-v7:23.0.1' 
compile 'com.google.android.gms:play-services:7.8.0' 

Trước khi tôi đã sử dụng compile 'com.google.android.gms:play-services:7.5.0'

Hope this helps một ai đó.

1

Tôi đã gặp lỗi tương tự khi gần đây tôi nâng cấp phụ thuộc dịch vụ của mình. Nó dường như xảy ra khi bạn rời khỏi việc cập nhật các phụ thuộc firebase tương ứng với phiên bản của dịch vụ chơi bạn sử dụng.

Đây là những gì hai phiên bản phụ thuộc của tôi là:

Lỗi phiên bản phụ thuộc

compile 'com.google.firebase:firebase-appindexing:10.0.1' 
compile 'com.google.android.gms:play-services-maps:10.0.1' 
compile 'com.google.android.gms:play-services-places:10.0.1' 
compile 'com.google.android.gms:play-services-location:10.0.1' 
compile 'com.google.firebase:firebase-auth:9.8.0' 
compile 'com.google.firebase:firebase-database:9.8.0' 
compile 'com.firebaseui:firebase-ui-database:1.0.1' 
compile 'com.google.firebase:firebase-storage:9.8.0' 

phiên bản làm việc của phụ thuộc ''

compile 'com.google.firebase:firebase-appindexing:10.0.1' 
compile 'com.google.android.gms:play-services-maps:10.0.1' 
compile 'com.google.android.gms:play-services-places:10.0.1' 
compile 'com.google.android.gms:play-services-location:10.0.1' 
compile 'com.google.firebase:firebase-auth:10.0.0' 
compile 'com.google.firebase:firebase-database:10.0.0' 
compile 'com.firebaseui:firebase-ui-database:1.0.1' 
compile 'com.google.firebase:firebase-storage:10.0.0' 

'' Google dường như di chuyển cập nhật dịch vụ chơi cùng với cập nhật firebase trong những ngày này. Hy vọng điều này tiết kiệm một vài linh hồn ra khỏi đó.

-1

Đối với tôi nó hoạt động bằng cách thay thế

biên dịch 'com.google.android.gms: play-dịch vụ-appindexing: 9.8.0'

với:.

compile 'com.google.android.gms:play-services:10.0.0' 
Các vấn đề liên quan