multi-dex should disable pre-dexing unless you are targeting 21+

Are you still have problems?

On Fri, Dec 5, 2014 at 4:23 PM, Zac Bowling <z...@apportable.com> wrote:

> Oh sorry. Omg. Wow. I have no idea how things have been working.
>
> So these jars that have been coming from older build system actually have
> been predex’d. They don’t contain classes but dex files themselves. They
> work oddly in the rest of gradle except for this step.
>
> Wow. Hahaha. Sorry about that.
>
>
>
> On Dec 5, 2014, at 4:16 PM, Zac Bowling <z...@apportable.com> wrote:
>
> It’s not adding all the dependencies to that allclasses.jar though for the
> ProGaurd pass. I think I know what to do to fix the logic in
> BasePlugin/JarMergingTask but I can’t easily rebuild the plugin at the
> moment. The JarMergingTask is pulling in only inputDir and not any of the
> inputLibraries. The inputDir only has the out of the java compile step
> (attaching jdb and dumping the state while stepping through). The
> dependencies are in inputLibraries so those classes are not pulled in.
>
> That explains why allclasses.jar is almost totally empty in my specific
> case. Thats why it fails in the progaurd pass (see the error below).
>
> Without turning on the mutlidex thought all those dependencies do get
> added to the final dex correctly. Also if I add a test activity to the main
> project for it to compile with mutlidex on, I get the same progaurd
> warnings but the final dex will have all the dependencies as well but the
> main list of expected classes to be kept in the primary dex is not
> respected (that the manifest scanning step gets from the manifest) since
> those do not make it in the components.jar. Dx then just picks classes
> purely on it’s own and some activities, services, broadcast receivers, code
> called early in JNI, etc that live in my dependencies get put in
> classes2.dex instead of forcing them to the primary dex.
>
> I can send you a sample if you want one. (I don’t want to post it to the
> list because it may contain client sensitive data but I can email you
> directly)
>
> Thanks!
>
> Zac
>
> On Dec 5, 2014, at 2:40 PM, Xavier Ducrohet <x...@android.com> wrote:
>
> We have a jar-merging task running before this task that should be merging
> everything into allclasses.jar
>
> On Fri, Dec 5, 2014 at 2:18 PM, Zac Bowling <z...@apportable.com> wrote:
>
>> So I'm fairly sure there is a multidex bug in the gradle plugin from an
>> assumption of how project are laid out. I post this on the bug tracker in a
>> bit but I wanted to post it here first.
>>
>> Imagine a project where your activities and services are actually being
>> built in subprojects or in your jar dependencies and not in the top level
>> app project. The Progaurd step to make the components.jar only passing in
>> the jar for the current Gradle project but not all the dependent ones when
>> it makes that components.jar.
>>
>> In BasePlugin.groovy after:
>>         ProGuardTask proguardComponentsTask =
>> createShrinkingProGuardTask(project,
>>
>> "shrink${config.fullName.capitalize()}MultiDexComponents")
>>
>> The proguard is step is only using:
>>
>>  proguardComponentsTask.injars(pcData.inputFiles.call().iterator().next())
>>
>> If your dependencies are the ones that have all your classes the step
>> will just fail (with "java.io.IOException: The output jar is empty. Did you
>> specify the proper '-keep' options?"). If you get it to sort of work by
>> having just a single class reference work I believe that progaurd will not
>> produce what you expect it to feed into the next step when it that private
>> method in dx.
>>
>>
>> I think the entire process of asking Progaurd to shink may be an issue. I
>> believe all dependencies should be added or that the allclasses.jar should
>> be used instead.
>>
>> Also these two items are forced to always be added to the -keep list and
>> they still warn with the same error:
>> Note: the configuration refers to the unknown class
>> 'android.app.backup.BackupAgent'
>> Note: the configuration refers to the unknown class
>> 'java.lang.annotation.Annotation'
>>
>> Here is an example of what we see with the error in our cases:
>>
>> :app:shrinkDebugMultiDexComponents
>> Executing task ':app:shrinkDebugMultiDexComponents' (up-to-date check
>> took 0.002 secs) due to:
>>   Input file
>> /private/tmp/TestShit/app/build/intermediates/multi-dex/debug/allclasses.jar
>> has changed.
>>   Input file
>> /private/tmp/TestShit/app/build/intermediates/multi-dex/debug/manifest_keep.txt
>> has changed.
>> ProGuard, version 4.11
>> Reading program jar
>> [/private/tmp/TestShit/app/build/intermediates/multi-dex/debug/allclasses.jar]
>> Note: the configuration refers to the unknown class
>> 'com.apportable.app.VerdeApplication'
>> Note: the configuration refers to the unknown class
>> 'android.content.Context'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.activity.VerdeActivity'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.activity.GdbServerService'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.media.AudioManagerService'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.activity.ManageSpaceActivity'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.notifications.NotificationsBootReceiver'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.notifications.NotificationsAlarmReceiver'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.notifications.LocalNotificationService'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.iap.BillingService'
>> Note: the configuration refers to the unknown class
>> 'com.apportable.iap.BillingReceiver'
>> Note: the configuration refers to the unknown class
>> 'com.facebook.LoginActivity'
>> Note: the configuration refers to the unknown class
>> 'com.adjust.sdk.ReferrerReceiver'
>> Note: the configuration refers to the unknown class
>> 'com.mobileapptracker.Tracker'
>> Note: the configuration refers to the unknown class
>> 'com.amazon.device.ads.AdActivity'
>> Note: the configuration refers to the unknown class
>> 'com.google.android.gms.ads.AdActivity'
>> Note: the configuration refers to the unknown class
>> 'com.millennialmedia.android.MMActivity'
>> Note: the configuration refers to the unknown class
>> 'com.millennialmedia.android.VideoPlayerActivity'
>> Note: the configuration refers to the unknown class
>> 'com.rhythmnewmedia.sdk.RhythmActivity'
>> Note: the configuration refers to the unknown class
>> 'com.rhythmnewmedia.sdk.video.RhythmVideoActivity'
>> Note: the configuration refers to the unknown class
>> 'com.applovin.adview.AppLovinInterstitialActivity'
>> Note: the configuration refers to the unknown class
>> 'com.inmobi.androidsdk.IMBrowserActivity'
>> Note: the configuration refers to the unknown class
>> 'com.jirbo.adcolony.AdColonyOverlay'
>> Note: the configuration refers to the unknown class
>> 'com.jirbo.adcolony.AdColonyFullscreen'
>> Note: the configuration refers to the unknown class
>> 'com.jirbo.adcolony.AdColonyBrowser'
>> Note: the configuration refers to the unknown class
>> 'com.rfm.sdk.HTMLBrowserView'
>> Note: the configuration refers to the unknown class
>> 'com.mopub.common.MoPubBrowser'
>> Note: the configuration refers to the unknown class
>> 'com.mopub.mobileads.MoPubActivity'
>> Note: the configuration refers to the unknown class
>> 'com.mopub.mobileads.MraidActivity'
>> Note: the configuration refers to the unknown class
>> 'com.mopub.mobileads.MraidVideoPlayerActivity'
>> Note: the configuration refers to the unknown class
>> 'com.unity3d.ads.android.view.UnityAdsFullscreenActivity'
>> Note: the configuration refers to the unknown class
>> 'com.scopely.zendeskhelper.ui.RequestActivity'
>> Note: the configuration refers to the unknown class
>> 'com.scopely.zendeskhelper.ui.RequestCompletionActivity'
>> Note: the configuration refers to the unknown class
>> 'android.app.backup.BackupAgent'
>> Note: the configuration refers to the unknown class
>> 'java.lang.annotation.Annotation'
>> Note: android.support.multidex.MultiDexExtractor accesses a method
>> 'apply()' dynamically
>> Note: there were 39 references to unknown classes.
>>       You should check your configuration for typos.
>>       (
>> http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
>> Note: there were 1 accesses to class members by means of introspection.
>>       You should consider explicitly keeping the mentioned class members
>>       (using '-keep' or '-keepclassmembers').
>>       (
>> http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclassmember
>> )
>> Note: You're ignoring all warnings!
>> :app:shrinkDebugMultiDexComponents FAILED
>> :app:shrinkDebugMultiDexComponents (Thread[main,5,main]) completed. Took
>> 0.122 secs.
>>
>> FAILURE: Build failed with an exception.
>>
>> * What went wrong:
>> Execution failed for task ':app:shrinkDebugMultiDexComponents'.
>> > java.io.IOException: The output jar is empty. Did you specify the
>> proper '-keep' options?
>>
>> * Try:
>> Run with --stacktrace option to get the stack trace. Run with --debug
>> option to get more log output.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "adt-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to adt-dev+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Xavier Ducrohet
> Android SDK Tech Lead
> Google Inc.
> http://developer.android.com | http://tools.android.com
>
> Please do not send me questions directly. Thanks!
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "adt-dev" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/adt-dev/4VVvCr8r3EE/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> adt-dev+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "adt-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to adt-dev+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Xavier Ducrohet
Android SDK Tech Lead
Google Inc.
http://developer.android.com | http://tools.android.com

Please do not send me questions directly. Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adt-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to