我正在使用Android P并针对AndroidX进行编译.在debug/beta中运行良好,但是当我发布时,我在运行时遇到了一个神秘的崩溃:
2018-06-24 00:21:26.080 11971-11971 /?E/LoadedApk:无法实例appComponentFactory抛出java.lang.ClassNotFoundException:未找到路径类 "androidx.core.app.CoreComponentFactory":DexPathList [zip文件"/data/app/app.itsyour.elegantstocks-EuVZWdDgzplhm0Hpa90VwA= =/base.apk"],nativeLibraryDirectories = [/数据/应用/ app.itsyour.elegantstocks-EuVZWdDgzplhm0Hpa90VwA ==/LIB/86,/系统/ lib中]在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126 )java.lang.ClassLoader.loadClass(ClassLoader.java:379)at java.lang.ClassLoader.loadClass(ClassLoader.java:312)at android.app.LoadedApk.createAppFactory(LoadedApk.java:226)at android.app .LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:731)在android.app.LoadedApk.getClassLoader(LoadedApk.java:772)在android.app.LoadedApk.getResources(LoadedApk.java:994)在android.app.ContextImpl.createAppContext(在android.app.ActivityThread.access $ 1000的android.app.ActivityThread.handleBindApplication(ActivityThread.java:5736)上的ContextImpl.java:2345(Activ)ityThread.java:197)在Android.os.Looper.loop(Looper.java)的android.app.Handler.dispatchMessage(Handler.java:106)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1634) :193)在android.app.ActivityThread.main(ActivityThread.java:6642)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java) :493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)2018-06-24 00:21:26.145 1667-1854 /?E/SurfaceFlinger:ro.sf.lcd_density必须定义为构建属性2018-06-24 00:21:26.233 1667-1703 /?E/SurfaceFlinger:ro.sf.lcd_density必须定义为构建属性2018-06-24 00:21:29.627 1796-1913 /?E/TaskPersister:访问最近目录的文件错误(目录不存在?).2018-06-24 00:21:30.087 11971-11971 /?E/AndroidRuntime:FATAL EXCEPTION:main进程:app.itsyour.elegantstocks,PID:11971 java.lang.IllegalArgumentException:指定为非null的参数为null:方法cdbhb,参数$ receiver at app.itsyour.elegantstocks.aba(Unknown资料来源:2)app.itsyour.elegantstocks.feature.navigator.ba $ aa(未知来源:24)at app.itsyour.elegantstocks.feature.navigator.baa(未知来源:13)at app.itsyour.elegantstocks.feature .navigator.baa(未知来源:2)androidx.recyclerview.widget.RecyclerView $ aa(未知来源:0)androidx.recyclerview.widget.RecyclerView $ ab(未知来源:29)androidx.recyclerview.widget.RecyclerView $ pa(未知来源:39)在androidx.recyclerview.widget.RecyclerView $ pa(未知来源:510)在androidx.recyclerview.widget.RecyclerView $ pa(未知来源:5)在androidx.recyclerview.widget.RecyclerView $ pc (未知来源:1)在androidx.recyclerview.widget.LinearLayoutManager $ ca(未知来源:11)在androidx.recyclerview.widget.LinearLayoutManager.a(未知的酸)ce:0)androidx.recyclerview.widget.LinearLayoutManager.a(未知来源:44)在androidx.recyclerview.widget.RecyclerView.O的androidx.recyclerview.widget.LinearLayoutManager.c(未知来源:371)处(未知来源: 42)在androidx.recyclerview.widget.RecyclerView.q(未知来源:41)androidx.recyclerview.widget.RecyclerView.onLayout(未知来源:5)在android.view.View.layout(View.java:20670)at在android.view.View.View的android.widget.FrameLayout.onLayout(FrameLayout.java:261)的android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)的android.view.ViewGroup.layout(ViewGroup.java:6194) .layout(View.java:20670)位于android.view.Viewout上的android.view.Loutout.onLayout(未知来源:66)的android.view.ViewGroup.layout(ViewGroup.java:6194) .java:20670)在Android.widget.FrameLayout.onLayout(FrameLayout.java:261)的android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)的android.view.ViewGroup.layout(ViewGroup.java:6194)在androi 在android.view上的android.view.reshout(浏位于androidx.coordinatorlayout.wout上的android..coout.Loutout.(android.Co.:606),androidx.coordinatorlayout.widget.CoordinatorLayout.(未知来源:143).在androidx.coordinatorlayout.widget.CoordinatorLayout上的android.viewout(View.java:61670). a(未知来源:32)在Android.view.ViewGroup.layout(ViewGroup.java)的android.view.View.layout(View.java:20670)的androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(未知来源:48) :6194)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)的android.widget.FrameLayout.onLayout(FrameLayout.java:261)在android.view.View.layout(View.java:20670)在android .view.ViewGroup.layout(ViewGroup.java:6194)在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)在android.widget.LinearL 在Android.widget.FrameLayout.layoutChildren(FrameLayout)的android.view.View.layout(ViewGroup.java:6194)的android.view.View.layout(View.java:20670)的ayout.onLayout(LinearLayout.java:1565) .java:323)在android.view.View.Loutout(ViewLayout.java:261)android.view.View.layout(View.java:20670)的android.view.View.layout(ViewGroup.java:6194)上的android.widget.FrameLayout.onLayout(FrameLayout.java:261)在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)在android.widget.LinearLayout.onLayout(LinearLayout.java:1565)在android.view. View.layout(View.java:20670)在android.view.ViewGroup.layout(ViewGroup.java:6194)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)在android.widget.FrameLayout.onLayout(的FrameLayout .java:261)在com.android.internal.policy.DecorView.onLayout(DecorView.java:753)在android.view.View.layout(View.java:20670)2018-06-24 00:21:30.087 …
迁移项目或在已迁移的分支之间切换时,Android Studio无法构建项目,因为它无法找到该android.support.design.widget.Snackbar程序包.删除了支持/设计包,但迁移表未列出此组件的正确新包.
以下是我正在使用的代码.我正在使用androidx.每个FAB都有一个黑色图标,即使它有白色.
mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<include layout="@layout/content_geral" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="24dp"
app:backgroundTint="@color/colorPrimary"
app:srcCompat="@drawable/ic_cloud_upload"
tools:ignore="VectorDrawableCompat" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我想将com.google.android.material.tabs.TabLayout组件与Android的新ViewPager实现一起使用androidx.viewpager2.widget.ViewPager2。但是,setupWithViewPager(..)提供的方法TabLayout仅支持旧的ViewPager实现。有没有一种方法可以轻松地将a绑定TabLayout到ViewPager2组件?
关闭
我们正在尝试将android库(正在编译android支持库)集成到已迁移到androidX的项目中.我们得到的原因不明
can't find referenced method 'void addOnTabSelectedListener(com.google.android.material.tabs.TabLayout$OnTabSelectedListener)' in program class com.google.android.material.tabs.TabLayout
Run Code Online (Sandbox Code Playgroud)
同时尝试启用proguard启用构建.
gradle-wrapper: 4.8
gradle build tools : 3.2.0
compileSdkVersion 28
编辑于2018年10月9日
出于某种原因,这是一个计划问题,proguard显示错误的错误,在我们对源代码进行了一些更改后,忘了向proguard添加一些类,它改变了我们忘记添加的类的错误.添加后,一切都很顺利.
迁移到AndroidX后,我面临以下问题与Google Auth lib:
在Android 9 API 28上:
java.lang.IncompatibleClassChangeError: Class 'com.google.android.gms.auth.api.signin.internal.SignInHubActivity' does not implement interface 'androidx.lifecycle.LifecycleOwner' in call to 'androidx.lifecycle.Lifecycle androidx.lifecycle.LifecycleOwner.getLifecycle()' (declaration of 'androidx.lifecycle.LiveData' appears in /data/app/fourbottles.bsg.workinghours4b-G1onPKgFFE-l3aqjx0qDJw==/split_lib_dependencies_apk.apk)
at androidx.lifecycle.LiveData.observe(LiveData.java:172)
at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.zzn(Unknown Source:80)
at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.onActivityResult(Unknown Source:68)
at android.app.Activity.dispatchActivityResult(Activity.java:7454)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)
在Android 5.0.2 API 22上
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.Lifecycle$State …Run Code Online (Sandbox Code Playgroud) android kotlin android-support-library androidx google-auth-library
虽然底层的 startActivityForResult() 和 onActivityResult() API 在所有 API 级别的 Activity 类上都可用,但强烈建议使用 AndroidX Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02 中引入的 Activity Result API。
我想让我的用户从我的应用程序中拍摄照片并将该照片数据返回到我的应用程序。我打算使用旧的 startActivityForResult() 但是这个新方法看起来可以解决很多问题并且更可靠,所以我想试一试。我应该能够调用registerForActivityResult()并传递一个内置的合约来拍摄一张名为ActivityResultsContracts.TakePicture的照片:
this.registerForActivityResult(new ActivityResultContracts.TakePicture(), ...);
Run Code Online (Sandbox Code Playgroud)
但我得到: error: package ActivityResultContracts does not exist
我已将此添加到我的 app/build.gradle 中:
// original include
//implementation 'androidx.appcompat:appcompat:1.1.0'
// suggestion from Google documentation
//implementation 'androidx.appcompat:appcompat:1.2.0-alpha02'
// AndroidStudio suggested a newer version was available
implementation 'androidx.appcompat:appcompat:1.2.0-beta01'
Run Code Online (Sandbox Code Playgroud)
我尝试了alpha02和beta01并且它们似乎都没有文档中提到的类。
当我尝试在我的 java 文件顶部手动导入类时,AndroidStudio 也不认为该包存在。应该是androidx.activity.result.contract.ActivityResultContracts.TakePicture,但这是我看到的:
如果这很重要,我正在使用 gradle 3.5.3。(每当我尝试升级到最新的 gradle …
我正在尝试遵循https://developer.android.com/training/dependency-injection/hilt-jetpack#workmanager 中的指南并遇到以下错误
E/WM-WorkerFactory: Could not instantiate com.example.android.hilt.ExampleWorker
java.lang.NoSuchMethodException: <init> [class android.content.Context, class androidx.work.WorkerParameters]
Run Code Online (Sandbox Code Playgroud)
为了重现该问题,我在Dagger Hilt Example Repo 中添加了指南中的示例代码
E/WM-WorkerFactory: Could not instantiate com.example.android.hilt.ExampleWorker
java.lang.NoSuchMethodException: <init> [class android.content.Context, class androidx.work.WorkerParameters]
Run Code Online (Sandbox Code Playgroud)
注意:
AppNavigator在NavigationModule 中作为@Binds abstract fun bindNavigator(impl: AppNavigatorImpl): AppNavigator.
另请注意,替换AppNavigator为AppDatabasewhich is@Singleton无济于事。
这就是我开始工作的方式 MainActivity
class ExampleWorker @WorkerInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
val workerDependency: AppNavigator
) : Worker(appContext, workerParams) {
override fun doWork(): Result {
Log.d("WORKER", …Run Code Online (Sandbox Code Playgroud) 使用Android Studio将项目迁移到AndroidX(并手动修复了很多导入错误)后,我没有遇到编译错误,但是当应用启动时,我崩溃了:
Error inflating class android.support.design.widget.AppBarLayout。
布局文件中有问题的行是:
<android.support.design.widget.AppBarLayout
我的依赖项build.gradle是:
dependencies {
def lifecycle_version = '2.1.0-alpha02'
// used below--will be different for androidx (migrated 2019-02-04)
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha03'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:1.15.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0'
// Relay class
implementation 'com.jakewharton.rx2:replaying-share:2.1.0'
// ReplayingShare
implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0'
// RxBinding
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" // see def above
// includes ViewModel and LiveData …Run Code Online (Sandbox Code Playgroud) 我在这里遵循开发指南:
https://developer.android.com/guide/components/activities/testing
并有一个测试类,如:
@RunWith(AndroidJUnit4::class)
class MyTestSuite {
@get:Rule var activityScenarioRule = activityScenarioRule<MyActivity>()
@Test fun testEvent() {
val scenario = activityScenarioRule.scenario
}
}
Run Code Online (Sandbox Code Playgroud)
该方法activityScenarioRule<T>()未定义。我需要什么依赖?另外,在阅读这些文档时确定要添加哪些依赖项的最佳方法是什么?