Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android proguard error com.google.ads.util.i: and setMediaPlaybackRequiresUserGesture(boolean)

I am trying to create an APK file, but when I press Finish on the export dialog, I got error, and APK is not created. Cannot find anything on the net so far, maybe here someone can help? Error:

Proguard returned with error code 1. See console
Warning: com.google.ads.util.i: can't find referenced method 'void setMediaPlaybackRequiresUserGesture(boolean)' in class android.webkit.WebSettings
      You should check if you need to specify additional program jars.
Warning: there were 1 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile them and try again.
         Alternatively, you may have to specify the option 
         '-dontskipnonpubliclibraryclassmembers'.
java.io.IOException: Please correct the above warnings first.
    at proguard.Initializer.execute(Initializer.java:321)
    at proguard.ProGuard.initialize(ProGuard.java:211)
    at proguard.ProGuard.execute(ProGuard.java:86)
    at proguard.ProGuard.main(ProGuard.java:492)

I tried to add

-dontskipnonpubliclibraryclassmembers

but did not help. I am using Ads, this is a normal android App, works fine in the emulator.

My proguard.config is the default empty

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

And my project.properties:

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
# 
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-16  

Thanks

ps: are these default android proguard settings safe enough to prevent basic "hacking"? (If I can make it workable)

like image 803
Zoli Avatar asked Dec 21 '22 08:12

Zoli


1 Answers

As the warning message indicates, the Google Ads library refers to a method that isn't present in your target runtime (android-16). This method only exists as of android-17. You should specify a target of android-17 or higher, so ProGuard can find the method and properly analyze the code.

If the application works on other targets anyway, you can still specify other targets in your AndroidManifest.xml.

ProGuard provides some basic protection against static analysis: it obfuscates identifiers and modifies the structure of your code. For more protection, you can consider its commercial sibling DexGuard, which adds more protection against static analysis and dynamic analysis, with techniques like string encryption, class encryption, and tamper detection. Nothing is unbreakable, so in the end it's an economic trade-off for you and for potential hackers, of time, effort, money, gains, expertise,...

(I am the developer of ProGuard and DexGuard)

like image 181
Eric Lafortune Avatar answered Dec 30 '22 12:12

Eric Lafortune