Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

devsample运行报错 #544

Closed
yuanbin19920212 opened this issue Nov 3, 2017 · 6 comments
Closed

devsample运行报错 #544

yuanbin19920212 opened this issue Nov 3, 2017 · 6 comments

Comments

@yuanbin19920212
Copy link

错误报告

编译程序正常,运行程序崩溃

11-03 02:42:32.235 3069-3069/net.wequick.example.small E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.wequick.example.small, PID: 3069
android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment net.wequick.example.small.app.home.MainFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.support.v4.app.Fragment.instantiate(Fragment.java:432)
at android.support.v4.app.Fragment.instantiate(Fragment.java:400)
at net.wequick.small.ApkBundleLauncher.createObject(ApkBundleLauncher.java:996)
at net.wequick.small.Bundle.createObject(Bundle.java:700)
at net.wequick.small.Small.createObject(Small.java:351)
at net.wequick.small.Small.createObject(Small.java:345)
at net.wequick.example.small.app.main.MainActivity$SectionsPagerAdapter.getItem(MainActivity.java:137)
at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:101)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1034)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1182)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:786)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:22071)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:724)
at android.view.View.measure(View.java:22071)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2422)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1504)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1761)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
11-03 02:42:32.236 3069-3069/net.wequick.example.small E/AndroidRuntime: 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.ClassNotFoundException: Didn't find class "net.wequick.example.small.app.home.MainFragment" on path: DexPathList[[dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.small.app.detail.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.small.appok_if_stub.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.small.app.mine.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.lib.analytics.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/com.example.mysmall.lib.style.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.small.lib.utils.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.small.app.main.apk", dex file "/data/user/0/net.wequick.example.small/app_small_base/net.wequick.example.small.app.home.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/base.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_dependencies_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_0_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_1_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_2_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_3_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_4_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_5_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_6_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_7_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_8_apk.apk", zip file "/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/net.wequick.example.small-PyRlP5RYKsx7hasZDVeOBQ==/lib/x86, /data/user/0/net.wequick.example.small/files/storage/net.wequick.example.small.app.mine/lib/x86, /data/user/0/net.wequick.example.small/files/storage/net.wequick.example.small.lib.utils/lib/x86, /data/user/0/net.wequick.example.small/files/storage/net.wequick.example.small.app.main/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.support.v4.app.Fragment.instantiate(Fragment.java:422)
... 58 more

期望结果正常运行

实际结果崩溃

Small环境

Compile-time

  gradle-small plugin : 1.3.0-beta3 (project)
            small aar : 1.3.0-beta3 (project)
    small binding aar : 1.1.2 (project)
          gradle core : 4.1
       android plugin : 2.3.0
                   OS : Windows 7 6.1 (amd64)

Bundles

type name PP sdk aapt support file size
host app 26 25.0.2 25.1.0
stub app+stub 26 25.0.2 25.1.0
app app.main 0x77 26 25.0.2 25.1.0 *.main.apk 11.7 KB
app app.mine 0x16 26 25.0.2 *.mine.apk 48.1 KB
app app.ok-if-stub 0x6a 26 25.0.2 *.appok_if_stub.apk 19.7 KB
app app.detail 0x67 26 25.0.2 25.1.0 *.detail.apk 5.8 KB
app app.home 0x70 26 25.0.2 *.home.apk 6.7 KB
lib lib.afterutils 0x45 26 25.0.2 25.1.0 *.afterutils.apk 3.7 KB
lib lib.analytics 0x76 26 25.0.2 *.analytics.apk 126.6 KB
lib lib.utils 0x73 26 25.0.2 25.1.0 *.utils.apk 6.8 KB
lib lib.style 0x79 26 25.0.2 25.1.0 *.style.apk 5.7 KB
web web.about 26 25.0.2 25.1.0 *.about.apk 24.5 KB

Runtime

  Device : 小米4\Android emulator
     SDK : Android 6.0 \Android 8.0
     ABI : armeabi-v7a
@yuanbin19920212
Copy link
Author

svn上面的最新代码支持databinding了嘛?上面的错误是databinding编译失效,导致home插件里面丢失。在devSample项目里面只看见了small-databinding项目,没有看到在buildsrc里面怎么处理的。。

@galenlin
Copy link
Member

最新的代码是支持dataBinding的。我试过DevSample运行正常。

原理:

  • AppPlugin#hookDataBinding 将插件的 DataBinding 包名修改为插件包名
  • HostPlugin#hookDataBinding 根据插件包名,分发 DataBinding 对应方法到插件

@yinhonglu
Copy link

yinhonglu commented Nov 28, 2017

我用最新的代码运行,也出现了这个问题。

@NoyceChow
Copy link

NoyceChow commented Dec 19, 2017

最新下载的sample工程编译和安装OK,运行时也是报同样的错误:InstantiationException: Unable to instantiate fragment
没看出这个与databinding有关系。

@yuanbin19920212
Copy link
Author

image
宿主里面的home插件MainFragment 类不存在,代码中添加了混淆的,不知道什么原因造成的,用的AS 3.0。

@yuanbin19920212
Copy link
Author

1d4006aa-08f3-4e80-bb27-f9b2710fe96d

造成子插件某些class文件资源找不到,是由于该插件使用了databinding,作者在AppPlugin中对databinding进行了处理,如上图。

image
上图代码删除了与项目不相干的文件,但是在window系统中文件分隔符是"",类unix系统是"/",作者可能用的mac笔记本。上图中获取到的relativePath 的开头永远不会和small.packagePath匹配。最终造成class文件被误删除掉了。

该段代码执行前:

1

执行后:

2

最终app\smallLibs下对应apk如下:

3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants