Blankj / AndroidUtilCode

:fire: Android developers should collect the following utils(updating).
https://blankj.com/2016/07/31/android-utils-code/
Apache License 2.0
33.29k stars 10.68k forks source link

Warning:A class activity declared in the AndroidManifest.xml cannot be found in the compile path: [com.blankj.utilcode.util.PermissionUtils$PermissionActivity] #420

Closed Zulqurnain closed 6 years ago

Zulqurnain commented 6 years ago

I am receiving this error while compile and run after activating proguard

Proguard:

-dontwarn com.squareup.okhttp.**

#android utils
-keep class com.blankj.utilcode.** { *; }
-keep class com.blankj.utilcode.util.** { *; }
-keepclassmembers class com.blankj.utilcode.** { *; }
-dontwarn com.blankj.utilcode.**

#FFMPEGMetaDataReceiver rules
-keep class wseemann.media.** { *; }

#android annotation
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

build.gradle(app):

apply plugin: 'com.android.application'

def AAVersion = '4.3.1'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.some.myapp"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        debug {
            resValue "string", "dev_version", "v 1.0.0"
            buildConfigField "boolean", "SHOW_ADS", "false"

            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
        release {
            resValue "string", "dev_version", "v 1.0.0"
            buildConfigField "boolean", "SHOW_ADS", "false"

            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation ('com.android.support:appcompat-v7:27.1.0'){force true}
    implementation ('com.android.support:design:27.1.0'){force true}
    implementation ('com.android.support:support-v4:27.1.0'){force true}
    implementation ('com.android.support:cardview-v7:27.1.0'){force true}
    implementation ('com.android.support:recyclerview-v7:27.1.0'){force true}

    implementation 'com.android.support.constraint:constraint-layout:1.0.2'

    implementation "org.androidannotations:androidannotations-api:$AAVersion"
    annotationProcessor "org.androidannotations:androidannotations:$AAVersion"

    implementation 'com.github.hotchemi:android-rate:1.0.1'
    implementation 'com.google.firebase:firebase-ads:11.8.0'

    //RX Java
//    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//    implementation 'io.reactivex.rxjava2:rxjava:2.1.5'

    implementation 'com.github.machinarius:preferencefragment:0.1.1'

    implementation 'com.afollestad.material-dialogs:core:0.9.6.0'

    implementation 'com.blankj:utilcode:1.12.6'

    // for checking meta data and stuff of video
    implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'

    implementation 'joda-time:joda-time:2.9.9'

    implementation 'com.skyfishjy.ripplebackground:library:1.0.1'

}

What am i doing wrong , or is it a bug ?

Blankj commented 6 years ago

add it

android {
    ....
    lintOptions {
        abortOnError false
    }
}
Zulqurnain commented 6 years ago

After adding your solution , app crashes on PermissionUtils method only very first install of application , after that it works fine strange.

I am using like this:

PermissionUtils.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .callback(new PermissionUtils.SimpleCallback() {
                    @Override
                    public void onGranted() {
                        myCustomFunction();
                    }

                    @Override
                    public void onDenied() {
                        Toast.makeText(appActivity, "Unable to get Write permission...", Toast.LENGTH_SHORT).show();
                    }
                }).request();

and i have also declared permission in AndroidManifest what is going on ?

Blankj commented 6 years ago

show ur crash stack.

Zulqurnain commented 6 years ago

Stacktrace

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.jutt.zjscreenrecorder, PID: 3491
                                                                         java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jutt.zjscreenrecorder/com.blankj.utilcode.util.PermissionUtils$PermissionActivity}: java.lang.IllegalArgumentException: permission cannot be null or empty
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                                                                             at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                             at android.os.Looper.loop(Looper.java:164)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                                                                          Caused by: java.lang.IllegalArgumentException: permission cannot be null or empty
                                                                             at android.content.pm.PackageManager.buildRequestPermissionsIntent(PackageManager.java:3544)
                                                                             at android.app.Activity.requestPermissions(Activity.java:4381)
                                                                             at com.blankj.utilcode.util.PermissionUtils$PermissionActivity.onCreate(PermissionUtils.java:300)
                                                                             at android.app.Activity.performCreate(Activity.java:7009)
                                                                             at android.app.Activity.performCreate(Activity.java:7000)
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
                                                                             at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                             at android.os.Looper.loop(Looper.java:164) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6494) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
Zulqurnain commented 6 years ago

Any update regarding this issue?

Blankj commented 6 years ago

U can run my demo to test PermissionActivity. I don't know why ur app crashes.

Zulqurnain commented 6 years ago

Problem is i am using Proguard , and your demo doesn't , if i disable proguard , everything works fine but i want to use proguard , to compress and encrypt my app

Blankj commented 6 years ago

I used proguard runs well. U can use proguard in my demo to try it.

Blankj commented 6 years ago

U can use the version of 1.13.2 to test it again.

Zulqurnain commented 6 years ago

after changing the version it works like a charm

Zulqurnain commented 6 years ago

again same issue is happening in 1.13.5

Blankj commented 6 years ago

what's the difference of the source code?

Zulqurnain commented 6 years ago

Difference is i am not using PermissionUtil this time and proguard is active , my guess was proguard was removing permission activity so i added a rules to keep that activity , but still getting this warning

Blankj commented 6 years ago

u can try

minifyEnabled false
useProguard true
Zulqurnain commented 6 years ago

useProguard false in debug mode did the trick but i am still getting warning regarding PermissionUtil activity is not in Manifest

Blankj commented 6 years ago

u can update the version to 1.14.0.

Blankj commented 6 years ago

Try the version of 1.16.3?