本应用是拉勾教育《Android 工程师进阶34讲》专栏的示例应用。本示例的内容会随着专栏不断更新。
mcoyjiang / lagouandroidshare Goto Github PK
View Code? Open in Web Editor NEW本应用是拉勾教育《Android 工程师进阶34讲》专栏的示例应用
本应用是拉勾教育《Android 工程师进阶34讲》专栏的示例应用
关于在gralde 3.6.0以上跑示例同时使用了androidx的同学看这里,有2个坑:
TransformInvocation.inputs.jarInputs
第一个问题的解决方案:在transform方法中,inputs.each block 中添加如下代码:
transformInput.jarInputs.forEach {
it.file.copyTo(
info.outputProvider.getContentLocation(it.name, inputTypes, scopes, Format.JAR),
overwrite = true
)
}
或者:
transformInput.jarInputs.each { JarInput jarInput ->
File file = jarInput.file
System.out.println("find jar input: " + file.name)
def dest = outputProvider.getContentLocation(jarInput.name,
jarInput.contentTypes,
jarInput.scopes, Format.JAR)
FileUtils.copyFile(file, dest)
}
第二个问题的解决方案就很简单:在ClassVisitor类的的viditmethod
方法中,将下面的代码:
if(superClassname.equals("android/support/v7/AppCompatActivity")){
if(name.startsWith("onCreate")){
return new LifeCycleMethodVisitor(methodVisitor,className,name);
}
}
改为
if(superClassname.equals("androidx/appcompat/app/AppCompatActivity")){
if(name.startsWith("onCreate")){
return new LifeCycleMethodVisitor(methodVisitor,className,name);
}
}
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.asmlifecycledemo/com.example.asmlifecycledemo.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.asmlifecycledemo.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.asmlifecycledemo-HlJlwafushUImzYDu1LOQg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.asmlifecycledemo-HlJlwafushUImzYDu1LOQg==/lib/arm64, /system/lib64, /vendor/lib64]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2914)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3100)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1804)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6907)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.asmlifecycledemo.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.asmlifecycledemo-HlJlwafushUImzYDu1LOQg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.asmlifecycledemo-HlJlwafushUImzYDu1LOQg==/lib/arm64, /system/lib64, /vendor/lib64]]
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.app.Instrumentation.newActivity(Instrumentation.java:1180)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2904)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3100)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1804)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6907)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
一下是崩溃日志,一启动就会崩溃。但是如果和课程中一样只是加入Log的方法没有这个问题。
2020-09-10 15:39:47.556 16981-16981/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.wondroid.transforminject, PID: 16981
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.wondroid.transforminject/com.wondroid.transforminject.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.wondroid.transforminject.MainActivity" on path: DexPathList[[zip file "/data/app/com.wondroid.transforminject-o5Gj4PwPLYWk0oRKUyulcg==/base.apk"],nativeLibraryDirectories=[/data/app/com.wondroid.transforminject-o5Gj4PwPLYWk0oRKUyulcg==/lib/arm64, /system/lib64, /system/product/lib64]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3228)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3443)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7520)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.wondroid.transforminject.MainActivity" on path: DexPathList[[zip file "/data/app/com.wondroid.transforminject-o5Gj4PwPLYWk0oRKUyulcg==/base.apk"],nativeLibraryDirectories=[/data/app/com.wondroid.transforminject-o5Gj4PwPLYWk0oRKUyulcg==/lib/arm64, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
at android.app.Instrumentation.newActivity(Instrumentation.java:1251)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3216)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3443)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7520)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
2020-04-12 22:03:24.204 18100-18100/com.laojizhang.compile_insert E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.laojizhang.compile_insert, PID: 18100
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/R$drawable;
at androidx.appcompat.widget.AppCompatDrawableManager$1.(AppCompatDrawableManager.java:63)
at androidx.appcompat.widget.AppCompatDrawableManager.preload(AppCompatDrawableManager.java:57)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:328)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:278)
at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:221)
at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:543)
at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:98)
at android.app.Activity.attach(Activity.java:6909)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2750)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.appcompat.R$drawable" on path: DexPathList[[zip file "/data/app/com.laojizhang.compile_insert-6QI6CYdHxt2f3XyKbd9MaQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.laojizhang.compile_insert-6QI6CYdHxt2f3XyKbd9MaQ==/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at androidx.appcompat.widget.AppCompatDrawableManager$1.(AppCompatDrawableManager.java:63)
at androidx.appcompat.widget.AppCompatDrawableManager.preload(AppCompatDrawableManager.java:57)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:328)
at androidx.appcompat.app.AppCompatDelegateImpl.(AppCompatDelegateImpl.java:278)
at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:221)
at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:543)
at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:98)
at android.app.Activity.attach(Activity.java:6909)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2750)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
java.lang.ClassNotFoundException: Didn't find class "android.support.constraint.ConstraintLayout" on path: DexPathList[[zip file "/data/app/com.example.asmlifecycledemo-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.asmlifecycledemo-2/lib/x86, /system/lib, /vendor/lib]]
已经申请了读写SD权限
Suppressed: java.io.IOException: No original dex files found for dex location /storage/emulated/0/say_something_hotfix.jar
一步一坑走过来 最后死在的classNotFound, 下面是报错
2020-05-26 15:50:54.649 12581-12581/com.android.internal.policy W/System.err: java.lang.ClassNotFoundException: Didn't find class "com.android.internal.policy.ClassLoader.android.SayHotFix" on path: DexPathList[[zip file "/storage/emulated/0/say_something_hotfix.jar"],nativeLibraryDirectories=[/system/lib, /system/product/lib]]
2020-05-26 15:50:54.649 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
2020-05-26 15:50:54.649 12581-12581/com.android.internal.policy W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2020-05-26 15:50:54.649 12581-12581/com.android.internal.policy W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2020-05-26 15:50:54.649 12581-12581/com.android.internal.policy W/System.err: at com.android.internal.policy.mainActivity$1.onClick(mainActivity.java:46)
2020-05-26 15:50:54.649 12581-12581/com.android.internal.policy W/System.err: at android.view.View.performClick(View.java:7125)
2020-05-26 15:50:54.650 12581-12581/com.android.internal.policy W/System.err: at android.view.View.performClickInternal(View.java:7102)
2020-05-26 15:50:54.650 12581-12581/com.android.internal.policy W/System.err: at android.view.View.access$3500(View.java:801)
2020-05-26 15:50:54.651 12581-12581/com.android.internal.policy W/System.err: at android.view.View$PerformClick.run(View.java:27336)
2020-05-26 15:50:54.651 12581-12581/com.android.internal.policy W/System.err: at android.os.Handler.handleCallback(Handler.java:883)
2020-05-26 15:50:54.651 12581-12581/com.android.internal.policy W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2020-05-26 15:50:54.651 12581-12581/com.android.internal.policy W/System.err: at android.os.Looper.loop(Looper.java:214)
2020-05-26 15:50:54.652 12581-12581/com.android.internal.policy W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7356)
2020-05-26 15:50:54.652 12581-12581/com.android.internal.policy W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2020-05-26 15:50:54.652 12581-12581/com.android.internal.policy W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
2020-05-26 15:50:54.652 12581-12581/com.android.internal.policy W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: Suppressed: java.io.IOException: No original dex files found for dex location /storage/emulated/0/say_something_hotfix.jar
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexFile.openDexFileNative(Native Method)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexFile.openDexFile(DexFile.java:365)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexFile.(DexFile.java:107)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexFile.(DexFile.java:80)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexPathList.loadDexFile(DexPathList.java:444)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexPathList.makeDexElements(DexPathList.java:403)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexPathList.(DexPathList.java:164)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:126)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:84)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at dalvik.system.DexClassLoader.(DexClassLoader.java:55)
2020-05-26 15:50:54.653 12581-12581/com.android.internal.policy W/System.err: at com.android.internal.policy.mainActivity$1.onClick(mainActivity.java:42)
2020-05-26 15:50:54.654 12581-12581/com.android.internal.policy W/System.err: ... 11 more
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.