问题只发生在发布版本或生成签名的apk上,当我构建调试时 - 没有这样的问题.
问题在升级到版本3.1后立即到达
Program type already present: com.android.vending.billing.IInAppBillingService
Message{kind=ERROR, text=Program type already present: com.android.vending.billing.IInAppBillingService, sources=[Unknown source file], tool name=Optional.of(D8)}
Run Code Online (Sandbox Code Playgroud)
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1'
implementation('org.apache.httpcomponents:httpmime:4.3') {
exclude module: "httpclient"
}
implementation 'com.chauthai.swipereveallayout:swipe-reveal-layout:1.4.0'
implementation 'com.github.clans:fab:1.6.4'
implementation 'com.android.billingclient:billing:1.0'
implementation 'com.nineoldandroids:library:2.4.0'
implementation 'com.daimajia.slider:library:1.1.5@aar'
implementation 'com.github.eggheadgames:Siren:1.5.0'
implementation 'me.leolin:ShortcutBadger:1.1.18@aar'
implementation 'me.everything:overscroll-decor-android:1.0.4'
implementation 'com.baoyz.pullrefreshlayout:library:1.2.0'
implementation 'com.nineoldandroids:library:2.4.0'
implementation 'com.daimajia.slider:library:1.1.5@aar'
//implementation 'com.android.support:multidex:1.0.3'
implementation 'com.github.esafirm.android-image-picker:imagepicker:1.8.0'
implementation 'de.hdodenhof:circleimageview:2.1.0'
implementation 'com.google.android.gms:play-services-places:12.0.0'
implementation 'com.google.android.gms:play-services-gcm:12.0.0'
implementation 'com.github.mukeshsolanki:country-picker-android:1.1.9'
implementation 'com.github.rey5137:material:1.2.4' …Run Code Online (Sandbox Code Playgroud) 我们有一个非常奇怪的崩溃,它指向系统类.它出现在应用程序启动时.
致命异常:java.lang.RuntimeException:无法启动活动ComponentInfo {com.myapp.android/com.myapp.android.main.BaseMainActivity}:java.lang.RuntimeException:无法创建应用程序com.myapp.android.main. MyApp的:在显示java.lang.NullPointerException android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)在android.app.ActivityThread.access $ 800(ActivityThread.java :151)在Android.app.Loper.loop(Looper.java:193)的android.app.Handler.dispatchMessage(Handler.java:110)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1342)在android.app.ActivityThread.main(ActivityThread.java:5333)的java.lang.reflect.Method.invokeNative(Method.java),位于com的java.lang.reflect.Method.invoke(Method.java:515). android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:828)位于dalvik.system.NativeStart.mai的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)n(NativeStart.java)由java.lang.RuntimeException引起:无法在android.app.LoadedApk.makeApplication(LoadedApk.java:529)上创建应用程序com.myapp.android.main.MyApp:java.lang.NullPointerException .app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)在android.app.ActivityThread.access $ 800(ActivityThread.java:151)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1342)位于android.app.AtoT.Thread.main的android.os.Handler.dispatchMessage(Handler.java:110)android.os.Looper.loop(Looper.java:193) ActivityThread.java:5333)at java.lang.reflect.Method.invokeNative(Method.java)at java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller位于dalvik.system.NativeStart.main(NativeStart.java)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)中的.run(ZygoteInit.java:828)由java.lang.NullPointerEx引起 知识在android.content.Context.getString(Context.java:343)的com.myapp.android.api.singletons.AppTrackingInstance.initAdjust(AppTrackingInstance.java:114)com.myapp.android.api.singletons.AppTrackingInstance. (AppTrackingInstance.java:92)在com.myapp.android.injection.modules.ApplicationScopeModule.provideAppTrackingInstance(ApplicationScopeModule.java:326)在com.myapp.android.injection.modules.ApplicationScopeModule $$ ModuleAdapter $ ProvideAppTrackingInstanceProvidesAdapter.get(ApplicationScopeModule $ $ ModuleAdapter.java:1618)在com.myapp.android.injection.modules.ApplicationScopeModule $$ ModuleAdapter $ ProvideAppTrackingInstanceProvidesAdapter.get(ApplicationScopeModule $$ ModuleAdapter.java:1552)在dagger.internal.Linker $ SingletonBinding.get(Linker.java :364)com.myapp.android.main.MyApp $$ InjectAdapter.injectMembers(MyApp $$ InjectAdapter.java:70)at com.myapp.android.main.MyApp $$ InjectAdapter.injectMembers(MyApp $$ InjectAdapter.java :23)在dagger.ObjectGraph $ DaggerObjectGraph.in ject(ObjectGraph.java:281)位于com.myapp.android.main.MyApp $ 1.run(MyApp.java:57),位于android的com.myapp.android.main.MyApp.onCreate(MyApp.java:51). app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)在android.app.LoadedApk.makeApplication(LoadedApk.java:526)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)在android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2429)在Android.app.Handler.dispatchMessage(Handler)上的android.app.ActivityThread.access $ 800(ActivityThread.java:151)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1342) .java:110)在android.os.Looper.loop(Looper.java:193)的android.app.ActivityThread.main(ActivityThread.java:5333)at java.lang.reflect.Method.invokeNative(Method.java)在java.lang.reflect.Method.invoke(Method.java:515)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:828)在com.android.internal.os.ZygoteInit.main (ZygoteInit.java:644)在dalvik.syste m.NativeStart.main(NativeStart.java)
我们使用Dagger 1,我们的应用程序是multidex-ed.
匕首模块:
@Module(
library = true, …Run Code Online (Sandbox Code Playgroud) 我试图在gradle中为我的项目设置jumboMode,它似乎能够解决以下DexIndexOverflowException:
com.android.dex.DexException:无法将新索引65536合并为非巨型指令!
DexIndexOverflowException:无法将新索引65772合并为非jumbo指令!
1)什么是jumboMode选项实际上在幕后做了什么?
android {
...
dexOptions {
jumboMode true
}
}
Run Code Online (Sandbox Code Playgroud)
2)我也注意到启用multi-dex也可以解决同样的问题,这两种方法之间的正确选择是什么?
android {
...
defaultConfig {
...
multiDexEnabled true
}
}
Run Code Online (Sandbox Code Playgroud) 我的Espresso测试一直在运行,直到我不得不支持multidex.
我的build.gradle,我有
minSdkVersion 14
targetSdkVersion 23
multiDexEnabled = true
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
incremental true
}
Run Code Online (Sandbox Code Playgroud)
@RunWith(AndroidJUnit4.class)
@SmallTest
public class Test1AuthenticationEspressoTest {
@Rule
public ActivityTestRule<WelcomeActivity> mActivityRule = new ActivityTestRule(WelcomeActivity.class);
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
junit.framework.AssertionFailedError:在com.livestrong.tracker.test.Test1AuthenticationEspressoTest中找不到测试
任何帮助将不胜感激.有人使用浓缩咖啡吗?
在我的项目中,我使用了需要multidex支持的库.根据我的研究,我发现它会导致应用启动时出现延迟.
我在gradle中启用了multidex功能.defaultConfig {multiDexEnabled true}
我曾经为kitkat设备获取NoClassDefFound Exception,所以我添加了以下内容:
我在清单中添加了应用程序名称为android:name ="android.support.multidex.MultiDexApplication"
并使用MultiDexApplication扩展了我的应用程序类.
我知道上面的任何一个都足够但我刚刚写了两个.
我尝试了不同的方法来优化启动的持续时间,如下所示:
1.added productFlavors {dev {minSdkVersion 21} prod {minSdkVersion 14}}
dexOptions {preDexLibraries false javaMaxHeapSize"4g"}
我只导入了必需的谷歌播放服务的库,而不是导入完整的库.
你能否建议我一种即兴创作的方法,因为它实际上需要超过10秒,有时甚至超过某些设备?
或者是否有任何其他原因导致延迟与multidex相比?
提前致谢.
我添加了build.gradle文件内容:
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.example.app"
minSdkVersion 17
targetSdkVersion 23
versionCode 3
versionName "1.2"
multiDexEnabled true
}
dexOptions {
incremental true
javaMaxHeapSize "10g"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: …Run Code Online (Sandbox Code Playgroud) android android-studio android-5.0-lollipop android-multidex
我正在处理的应用程序(基本代码不是由我编写的,包含许多无法删除的大型库).在最近的一次运行中,它开始响应消息:
这仅在应用程序尝试使用运行箭头时构建时发生,它在调用"rebuild"或"clean"时成功构建.
包含在线的解决方案是使用multiDexEnabled true(此处为multiDex文档.)
使用这个我能够使用"运行"箭头和"重建"获得建筑物.但是,构建并在手机上运行的应用程序崩溃时出现以下错误消息:
12-11 16:17:16.963 28868-28868/? D/dalvikvm: Late-enabling CheckJNI
12-11 16:17:17.023 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10471 (common_google_play_services_updating_text) in Lcom/google/android/gms/R$string;
12-11 16:17:17.023 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0021
12-11 16:17:17.023 28868-28868/com.myname.myappcoop I/dalvikvm: DexOpt: unable to optimize static field ref 0x28e8 at 0x2e in Lcom/google/android/gms/common/GoogleApiAvailability;.zza
12-11 16:17:17.033 28868-28868/com.myname.myappcoop W/dalvikvm: VFY: unable to resolve static field 10465 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
12-11 16:17:17.033 28868-28868/com.myname.myappcoop D/dalvikvm: VFY: replacing opcode 0x60 at 0x0012
12-11 16:17:17.033 28868-28868/com.myname.myappcoop …Run Code Online (Sandbox Code Playgroud) 亲爱的,我在很多博客文章中都看到,multidex apps启动比普通应用慢.我的应用程序使用了很多超过64k方法的库,所以我使用multidex.但是当我在发布版本中使用proguard时,最终的apk变得不到64k方法
所以我的问题是:我是否可以在Android调试版本中启用multidex,这样我就没有运行时错误?并在发布版本中禁用multi dex,因为我不需要它?
如果有,怎么样?
如果不是,Android是否足够智能以加速启动,因为它应该认识到应用程序不超过64k,即使它是多dex应用程序?
我的应用程序的下一个版本大约有70K方法.
了解使用Multidex的确切含义(通常意味着使用Multidex支持库来支持API <21)对我做出这个决定非常重要:
我应该付出很多努力(例如通过微调我的Proguard配置以更积极地缩小,倾倒一些第三方库等)以符合64K方法限制,或者我应该只启用Multidex?
该文件表明,Multidex支持库可能有一些严重的副作用(见Limitations of the multidex support library).
我真的应该期待什么?
我们将非常感谢您自己迁移到Multidex的反馈.
我在我的项目中得到多个dex文件定义错误.
我在使用这两种标签的build.gradle以及
dexOptions {
preDexLibraries = false
}
defaultConfig {
multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)
但仍然得到这个错误.
Information:Gradle tasks [:app:assembleDebug]
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams;
Error:com.android.dex.DexException: Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams;
Error: at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error: at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error: at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
Error: at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Error: at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
Error: at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error: at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error: at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error: at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error: at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
Error: at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
Error: at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: …Run Code Online (Sandbox Code Playgroud) 我正在使用CircledImageView库.它适用于棒棒糖+ Android版本.但在kitkat它崩溃了.所以在谷歌搜索后.我发现我必须在我的应用程序中实现multidex.
这是我的应用程序类.
public class FireApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Firebase.setAndroidContext(this);
Fresco.initialize (this);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Run Code Online (Sandbox Code Playgroud)
在defaultconfig下的build.gradle中,MultiDexEnabled为true
multiDexEnabled true
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,我收到以下错误.
java.lang.NoSuchFieldException: Field dexElementsSuppressedExceptions not found in class dalvik.system.PathClassLoader
at android.support.multidex.MultiDex.findField(MultiDex.java:288)
at android.support.multidex.MultiDex.access$300(MultiDex.java:57)
at android.support.multidex.MultiDex$V19.install(MultiDex.java:390)
at android.support.multidex.MultiDex$V19.access$000(MultiDex.java:369)
at android.support.multidex.MultiDex.installSecondaryDexes(MultiDex.java:242)
at android.support.multidex.MultiDex.install(MultiDex.java:161)
at android.support.multidex.MultiDexApplication.attachBaseContext(MultiDexApplication.java:39)
at com.buckydroid.anonchat.FireApp.attachBaseContext(Unknown Source)
at android.app.Application.attach(Application.java:182)
at android.app.Instrumentation.newApplication(Instrumentation.java:991)
at android.app.Instrumentation.newApplication(Instrumentation.java:975)
at android.app.LoadedApk.makeApplication(LoadedApk.java:511)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4564)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5268)
at java.lang.reflect.Method.invokeNative(Native …Run Code Online (Sandbox Code Playgroud) android ×10
android-multidex ×10
build.gradle ×1
crash ×1
dagger ×1
dex ×1
git ×1
java ×1
mode ×1
performance ×1