2017-05-24 11 views
1

私はInstant Appsのドキュメントでいくつかの実験をしようとしています:Android Instant Apps Native Android apps, without the installation.私は公式の文書に記載されている手順に従っています。私は、インスタントアプリの機能をテストするためにエミュレータNexus 5Xを作成しました。原因:java.lang.ClassNotFoundException:アトムクラスローダーまたは親クラスローダーで見つかりませんでした

私は自分のプロジェクトに2つの機能を作成しました。この機能は、インスタントアプリケーションの動作を確認するためのデモと非常によく似ています。 1つの機能でうまく機能していましたが、もう1つの機能を作成した後、2つの機能があり、アプリケーションがクラッシュします。ここで

05-24 12:07:12.259 12020-12028/? E/art: Failed writing handshake bytes (-1 of 14): Broken pipe 
05-24 12:07:15.952 12020-12020/com.williams.instantappdemo E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.williams.instantappdemo, PID: 12020 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.williams.instantappdemo/com.williams.instantappdemo.feature.MainActivity}: java.lang.ClassNotFoundException: could not find com.williams.instantappdemo.feature.MainActivity in any atom class loader or parent class loader 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2567) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: java.lang.ClassNotFoundException: could not find com.williams.instantappdemo.feature.MainActivity in any atom class loader or parent class loader 
    at com.google.android.instantapps.supervisor.loader.WhAppClassLoader.loadClass(WhAppClassLoader.java:100) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1078) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  
    at android.app.ActivityThread.-wrap12(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6119)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
    Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.williams.instantappdemo.feature.MainActivity" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 
    at com.google.android.instantapps.supervisor.loader.WhAppClassLoader.loadClass(WhAppClassLoader.java:85) 
      ... 11 more 
    Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.williams.instantappdemo.feature.MainActivity" on path: DexPathList[[zip file "/data/user/0/com.google.android.instantapps.supervisor/files/atom-cache/com.williams.instantappdemo/atom-download--base-1495607829279/base.jar"],nativeLibraryDirectories=[/data/user/0/com.google.android.instantapps.supervisor/files/native-lib/com.williams.instantappdemo, /system/lib, /vendor/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at com.google.android.instantapps.supervisor.loader.DexFirstClassLoader.doLoadClass(DexFirstClassLoader.java:50) 
    at com.google.android.instantapps.supervisor.loader.WhAppClassLoader.loadClass(WhAppClassLoader.java:92) 
      ... 11 more 
    Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.williams.instantappdemo.feature.MainActivity" on path: DexPathList[[zip file "/data/user/0/com.google.android.instantapps.supervisor/files/atom-cache/com.williams.instantappdemo/atom-download--feature-1495607829279/feature.jar"],nativeLibraryDirectories=[/data/user/0/com.google.android.instantapps.supervisor/files/native-lib/com.williams.instantappdemo, /system/lib, /vendor/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at com.google.android.instantapps.supervisor.loader.DexFirstClassLoader.doLoadClass(DexFirstClassLoader.java:50) 
    at com.google.android.instantapps.supervisor.loader.WhAppClassLoader.loadClass(WhAppClassLoader.java:92) 
      ... 11 more 

は、機能モジュールのbuild.gradleである:ここでは

apply plugin: 'com.android.feature' 

android { 
    compileSdkVersion 25 
    buildToolsVersion rootProject.buildToolsVersion 
    defaultConfig { 
     minSdkVersion 23 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    implementation project(':base') 
    testCompile 'junit:junit:4.12' 

} 

が特長2用build.gradleである:ここでは

apply plugin: 'com.android.feature' 


android { 
    compileSdkVersion 25 
    buildToolsVersion rootProject.buildToolsVersion 


    defaultConfig { 
     minSdkVersion 23 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 

     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    implementation project(':base') 

    testCompile 'junit:junit:4.12' 
} 

build.gradleですベースモジュール用:

ここで
apply plugin: 'com.android.feature' 

android { 
    compileSdkVersion 25 
    buildToolsVersion rootProject.buildToolsVersion 
    baseFeature true 
    defaultConfig { 
     minSdkVersion 23 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    feature project(':feature') 
    compile 'com.android.support:appcompat-v7:25.+' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    feature project(":feature1") 
} 

は、アプリモジュールのbuild.gradleです:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion rootProject.buildToolsVersion 


    defaultConfig { 
     applicationId "com.nagarro.instantappdemo" 
     minSdkVersion 23 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 


    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    implementation project(':feature') 
    implementation project(':feature1') 
    implementation project(':base') 
} 

誰もが私が間違っているの何をお勧めすることはできますか?

+0

CNF例外は、JVMがそのクラスを含むJARを見つけることができないことを意味します。パッケージ問題の可能性が最も高いです。あなたはすべてを正しく行ったと仮定していますが、JVMはそれが真実ではないことを伝えます。パッケージを見て、あなたがそのクラスを見つけることができるかどうかを見てください。 – duffymo

+0

MainActivityにはどのモジュールがありますか?アプリケーションモジュールですか? – MatPag

+0

@MatPag 'MainActivity'は両方の機能モジュールにあります。両方の機能モジュールは異なるパッケージを持っています –

答えて

3

MainActivityを含む機能のマニフェストファイルにある実際のアクティビティパッケージと一致しないようです。新しいパッケージにアクティビティをリファクタリングし、マニフェスト内のアクティビティに相対パスを使用しないときは、よくあるエラーです。完全

<activity android:name="com.williams.instantappdemo.feature.MainActivity"/> 

絶対に確認するためにパスを修飾することがその正確なパッケージでcom.williams.instantappdemo.feature.MainActivityを持っているかどうかを確認するためにApk Analyzerを使用して(/出力/のAPKを構築)APKファイルを検査します。

Merged Manifest viewを使用して、最後のマニフェスト(アプリモジュール)を検査して、すべての順序が正しいことを確認することもできます。また

、アプリケーションプロジェクト(「:アプリ」)を追加します。 記載されている技術を使用して、それはあなたのアプリケーション/インスタントアプリをパッケージ化するアプリのモジュールでAPPLICATIONIDが定義されて

アップデートを使用するように、基本機能モジュールに私は合併したマニフェストを調べ、問題を発見しました。ビルドプラグインは、モジュール名(feature1)の数字を無視して、両方の機能が同じ名前を持つようになりました。これは、ActivityNotFoundエラーを含む多くの問題を引き起こしました。 feature1モジュールの名前をfeatureOneに変更すると問題が解決しました。

+0

私はあなたのアプリで定義されたapplicationIdを使用するように "あなたのアプリケーション/インスタントアプリをパッケージ化するためのモジュール "を選択し、Merged Manifestをチェックしてください。https://pastebin.com/qrFXSuxg –

+0

マージされたマニフェストデータから、アクティビティはcom.nagarro.instantappdemo.feature.MainActivityとしてパッケージ化されています。 [:base] C:\ Users \ williams \ AndroidStudioProjects \ InstantAppDemo \ base \ build \ intermediates \ bundles \ debug \ AndroidManifest.xml:17:9-40 アクティビティ#comからcom.williams.instantappdemo.feature.MainActivityを追加しました。 .nagarro.instantappdemo.feature.MainActivity – Anirudh

+0

ああ、私の最後のペーストビンに問題がありました。これを確認してくださいhttps://pastebin.com/50jN9jXY –

関連する問題