Nuwa, pure java implementation, can hotfix your android application.

Related tags

Hook Nuwa
Overview

nuwa

Nuwa

Download

Nuwa is a goddess in ancient Chinese mythology best known for repairing the pillar of heaven.

With this Nuwa project,you can also have the repairing power, fix your android applicaiton without have to publish a new APK to the appstore.

Features

  • Support both dalvik and art runtime.
  • Support productFlavor and buildType.
  • Support proguard and multidex.
  • Pure java implementation.

Run the Sample

  1. in master branch, run and install the app.

    it shows『hello world』.

  2. copy sample/build/outputs/nuwa dir to somewhere for later use.

    for example: /Users/jason/Documents/nuwa

  3. change to bugfix branch, run the following command in terminal to generate patch.jar.

    ./gradlew clean nuwaQihooDebugPatch -P NuwaDir=/Users/jason/Documents/nuwa

    java verison must be same using android studio and terminal

  4. run following command to push patch.jar to sdcard.

    adb push sample/build/outputs/nuwa/qihoo/debug/patch.jar /sdcard/

  5. restart your application (kill the process).

    it shows『patch success』.

Integration

Get Gradle Plugin

  1. add following to the build.gradle of your root project.

classpath 'cn.jiajixin.nuwa:gradle:1.2.2'

build.gradle maybe look like this:

```
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'cn.jiajixin.nuwa:gradle:1.2.2'
    }
}
```
  1. add following to your build.gradle:

    apply plugin: "cn.jiajixin.nuwa"

Get Nuwa SDK

  • gradle dependency:

     dependencies {
     	compile 'cn.jiajixin.nuwa:nuwa:1.0.0'
     }
    

Use Nuwa SDK

  1. add following to your application class:

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        Nuwa.init(this);
    }
    
  2. load the patch file according to your needs:

    Nuwa.loadPatch(this,patchFile)
    

    I plan to provide the management of patch file later.

ProGuard

  • add follwing to you proguardFile if you are using proguard:

    -keep class cn.jiajixin.nuwa.** { *; }

Nuwa DSL

  1. You can add nuwa extension to your build.gradle. Generally, you don't need this.

    nuwa{
    
    }
    
  2. Nuwa extension support following DSL object.

    • includePackage:HashSet<String>

      The internal name of a class is its fully qualified name, where '.' are replaced by '/'. For example:

      cn/jiajixin/nuwasample/MainActivity.class

      Using includePackage,you can only fix those classes whose internal name starts with includePackage.For example:

    includePackage = ['cn/jiajixin/nuwasample']

     Default, Nuwa can fix classes which not from the android support library.
    
    • excludeClass:HashSet<String>

      All Application subclasses should not be injected by Nuwa.

      Default, Nuwa will automatically exclude the application declared in your manifest file. You need to exclude others using excludeClass

      Using excludeClass, you can not fix those classes whose internal name ends with excludeClass.For example:

      excludeClass = ['BaseApplication.class']

    • debugOn:boolean

      whether use Nuwa in debug mode, default totrue.

Generate Patch

For how to generate patch file, please reference the first three steps of Run the Sample.

There are two types of gradle task to generate patch file:

  • nuwaPatches

    this task will generate multi patch.jar for all variant.

  • nuwa${variant.name.capitalize()}Patch

    this task will generate one patch.jar for specific variant.

How it Works

Inspired by QZone hotfix solution from this article.

Nuwa Gradle

  • inject into all classes one java bytecode referring the Hack.class from a different dex, which can avoid CLASS_ISPREVERIFIED error when replacing class.
  • generate patch.jar according to mapping.txt and classes hash of last published APK.

Nuwa

  • inject the Hack.class.
  • inject the patch.jar into head of BaseDexClassLoader's pathList.

Later Plan

  • provide patch file management
  • improve security of Nuwa

License

The MIT License (MIT)

Copyright (c) 2015, jiajixin.cn

Comments
  • 运行出错

    运行出错

    15:01:56.333 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 15:01:56.333 [ERROR] [org.gradle.BuildExceptionReporter] at cn.jiajixin.nuwa.NuwaPlugin$_apply_closure1_closure2_closure9_closure12.doCall(NuwaPlugin.groovy:127) 15:01:56.333 [ERROR] [org.gradle.BuildExceptionReporter] at cn.jiajixin.nuwa.NuwaPlugin$_apply_closure1_closure2_closure9.doCall(NuwaPlugin.groovy:121) 15:01:56.333 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:558) 15:01:56.333 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:539) 15:01:56.334 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:77) 15:01:56.334 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.TaskMutator$1.execute(TaskMutator.java:73) 15:01:56.334 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 15:01:56.334 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) 15:01:56.334 [ERROR] [org.gradle.BuildExceptionReporter] ... 57 more 15:01:56.334 [ERROR] [org.gradle.BuildExceptionReporter]

    opened by yexin4133 10
  • 刚从坑里爬出来,严格来说,Nuwa目前是不支持ART的

    刚从坑里爬出来,严格来说,Nuwa目前是不支持ART的

    在ART会编译成native代码。 但是如果只发布部分代码的话,编译时是没办法进行内存地址定位的。 ART模式下也会分为解释执行与ART native模式执行,如果只是走解释执行,就还是按照原来dalvik的模式走的,用的符号引用,没问题,但一旦ART模式,比如你用handler调用你的补丁文件,内存地址就飞了,必定报错。

    解决方式:从理论上来说,只发布部分class是不行的,整个dex必须都要作为patch...

    可能作者的这套还没经过多少实际应用吧,其实还有很多的坑在里面,这套机制的局限性还有很多。 比如Application,provider等里面千万不能引用其他的class,android:process的处理等

    另外windows下的cygwin中使用貌似也不行

    • What went wrong: Execution failed for task ':app:nuwaClassBeforeDexDebug'.
    opened by xxxyanchenxxx 9
  • 运行报错,我重新写了一下Hello.java的方法,把class文件打包后就报错了

    运行报错,我重新写了一下Hello.java的方法,把class文件打包后就报错了

    11-19 15:45:27.404: E/AndroidRuntime(3459): FATAL EXCEPTION: main 11-19 15:45:27.404: E/AndroidRuntime(3459): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 11-19 15:45:27.404: E/AndroidRuntime(3459): at cn.jiajixin.nuwasample.MainActivity.onCreate(MainActivity.java:15) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.Activity.performCreate(Activity.java:5122) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1151) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.ActivityThread.access$600(ActivityThread.java:169) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.os.Handler.dispatchMessage(Handler.java:107) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.os.Looper.loop(Looper.java:194) 11-19 15:45:27.404: E/AndroidRuntime(3459): at android.app.ActivityThread.main(ActivityThread.java:5463) 11-19 15:45:27.404: E/AndroidRuntime(3459): at java.lang.reflect.Method.invokeNative(Native Method) 11-19 15:45:27.404: E/AndroidRuntime(3459): at java.lang.reflect.Method.invoke(Method.java:525) 11-19 15:45:27.404: E/AndroidRuntime(3459): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:854) 11-19 15:45:27.404: E/AndroidRuntime(3459): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621) 11-19 15:45:27.404: E/AndroidRuntime(3459): at dalvik.system.NativeStart.main(Native Method)

    opened by rjliulei 8
  • gradlew clean 错误

    gradlew clean 错误

    FAILURE: Build failed with an exception.

    • What went wrong: A problem occurred configuring project ':sample'.

      Could not find property 'property' on project ':sample'.

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED

    bug 
    opened by jayronlou 3
  • 开启混淆之后编译不通过,com.android.dx.cf.code.SimException: stack: overflow

    开启混淆之后编译不通过,com.android.dx.cf.code.SimException: stack: overflow

    开启混淆之后编译不通过,删除nuwa插件后可以正常编译。 Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow Uncaught translation error: com.android.dx.cf.code.SimException: stack: overflow UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.RuntimeException: Translation has been interrupted at com.android.dx.command.dexer.Main.processAllFiles(Main.java:608) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311) at com.android.dx.command.dexer.Main.run(Main.java:277) at com.android.dx.command.dexer.Main.main(Main.java:245) at com.android.dx.command.Main.main(Main.java:106) Caused by: java.lang.InterruptedException: Too many errors at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600) ... 4 more

    * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:dexPhoneSecretRelease'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51) at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction(Main.java:33) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35) at org.gradle.launcher.GradleMain.main(GradleMain.java:23) at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) Caused by: org.gradle.internal.UncheckedException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:39) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:66) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:235) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:222) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 47 more Caused by: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:42) at com.android.builder.core.AndroidBuilder.convertByteCode(AndroidBuilder.java:1194) at com.android.builder.core.AndroidBuilder$convertByteCode$8.call(Unknown Source) at com.android.builder.core.AndroidBuilder$convertByteCode$8.call(Unknown Source) at com.android.build.gradle.tasks.Dex.doTaskAction(Dex.groovy:151) at com.android.build.gradle.tasks.Dex.this$5$doTaskAction(Dex.groovy) at com.android.build.gradle.tasks.Dex$this$5$doTaskAction.callCurrent(Unknown Source) at com.android.build.gradle.tasks.Dex$this$5$doTaskAction.callCurrent(Unknown Source) at com.android.build.gradle.tasks.Dex.taskAction(Dex.groovy:90) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63) ... 53 more Caused by: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365) at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:40) ... 62 more

    opened by TangHuaiZhe 2
  • 使用Nuwa 替换 Activity 出现问题

    使用Nuwa 替换 Activity 出现问题

    将 MainAcitivty 作为了 补丁, 修改了 此activity种的一些信息。 但是在 加载插件完成后。

    在启动此activity 的时候,会报如下错误。

    W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;) 01-27 01:49:10.305 7975-7975/com.jingoal.hotfix I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested 01-27 01:49:10.305 7975-7975/com.jingoal.hotfix W/dalvikvm: VFY: unable to resolve interface method 17967: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z 01-27 01:49:10.305 7975-7975/com.jingoal.hotfix D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002 01-27 01:49:10.305 7975-7975/com.jingoal.hotfix I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode 01-27 01:49:10.305 7975-7975/com.jingoal.hotfix W/dalvikvm: VFY: unable to resolve interface method 17971: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode; 01-27 01:49:10.305 7975-7975/com.jingoal.hotfix D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002 01-27 01:49:10.313 7975-7975/com.jingoal.hotfix W/dalvikvm: Class resolved by unexpected DEX: Landroid/support/v7/app/AppCompatViewInflater;(0xa543c7c0):0x97d9f000 ref [Landroid/support/v7/appcompat/R$styleable;] Landroid/support/v7/appcompat/R$styleable;(0xa543c7c0):0x97cf6000 01-27 01:49:10.313 7975-7975/com.jingoal.hotfix W/dalvikvm: (Landroid/support/v7/app/AppCompatViewInflater; had used a different Landroid/support/v7/appcompat/R$styleable; during pre-verification) 01-27 01:49:10.313 7975-7975/com.jingoal.hotfix D/AndroidRuntime: Shutting down VM 01-27 01:49:10.317 7975-7975/com.jingoal.hotfix W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4b9f648) 01-27 01:49:10.325 7975-7975/com.jingoal.hotfix E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

    当然主要的还是: Class resolved by unexpected DEX: Landroid/support/v7/app/AppCompatViewInflater;(0xa543c7c0):0x97d9f000 ref [Landroid/support/v7/appcompat/R$styleable;] Landroid/support/v7/appcompat/R$styleable;(0xa543c7c0):0x97cf6000 01-27 01:49:10.313 7975-7975/com.jingoal.hotfix W/dalvikvm: (Landroid/support/v7/app/AppCompatViewInflater; had used a different Landroid/support/v7/appcompat/R$styleable; during pre-verification)

    出现了 Landroid/support/v7/appcompat/R$styleable;] 内存地址指向出现了两份。 导致 java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 这个异常的出现。

    是Activity 不可以作为 fix 的类么?

    opened by RebortY 2
  • 添加了nuwa后,程序直接闪退

    添加了nuwa后,程序直接闪退

    04-02 15:47:06.547 314-314/? W/ADB_SERVICES: terminating JDWP 5368 connection: Try again 04-02 15:47:06.547 314-314/? D/ADB_SERVICES: remove pid 5368 to jdwp process list 04-02 15:47:06.548 308-308/? I/Zygote: Process 5368 exited due to signal (11) 04-02 15:47:06.552 248-659/? I/BufferQueueProducer: Starting cn.jiajixin.nuwasample disconnect(P): api 2 04-02 15:47:06.552 248-659/? I/BufferQueueConsumer: Starting cn.jiajixin.nuwasample getReleasedBuffers: returning mask 0xffffffffffffffff 04-02 15:47:06.552 777-808/? D/GraphicBuffer: unregister, handle(0x7f77c62d60) (w:1080 h:1920 s:1088 f:0x1 u:0x000933) 04-02 15:47:06.552 777-808/? D/IMGSRV: gralloc_unregister_buffer:1503: ID=46998 ref=0

    opened by zhengwenhui 0
  • nuwaClassBeforeDexDebug Failed

    nuwaClassBeforeDexDebug Failed

    集成nuwa后build出错,环境和nuwaSample配置一样。 使用命令:gradlew clean --stacktrace --debug

    11:57:29.507 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for ta sk ':chinaaccassistant:nuwaClassBeforeDexDebug'. 11:57:29.509 [ERROR] [org.gradle.BuildExceptionReporter] > 1 11:57:29.513 [ERROR] [org.gradle.BuildExceptionReporter] 11:57:29.516 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is: 11:57:29.519 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.api.tasks.Ta skExecutionException: Execution failed for task ':chinaaccassistant:nuwaClassBef oreDexDebug'. 11:57:29.523 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.ap i.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActi onsTaskExecuter.java:69) 11:57:29.526 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.ap i.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTask Executer.java:46) 11:57:29.528 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.ap i.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecuti onAnalysisTaskExecuter.java:35) 11:57:29.531 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.ap i.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExec uter.java:64) 11:57:29.534 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.ap i.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter .java:58) 11:57:29.537 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.ap i.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySou rceFilesTaskExecuter.java:52)

    11:57:29.700 [ERROR] [org.gradle.BuildExceptionReporter] ... 57 more 11:57:29.702 [ERROR] [org.gradle.BuildExceptionReporter] 11:57:29.706 [LIFECYCLE] [org.gradle.BuildResultLogger] 11:57:29.708 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED 11:57:29.712 [LIFECYCLE] [org.gradle.BuildResultLogger] 11:57:29.715 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 45.529 secs 11:57:29.732 [INFO] [org.gradle.api.Project] PREDEX CACHE HITS: 0 11:57:29.735 [INFO] [org.gradle.api.Project] PREDEX CACHE MISSES: 3

    opened by gondole-zz 0
  • Corrected sentence structure and spelling error.

    Corrected sentence structure and spelling error.

    In the introductory paragraph, the second line is written as, " With this Nuwa project,you can also have the repairing power, fix your android applicaiton without have to publish a new APK to the appstore." There is an extra space after the 'Nuwa project,' which needs to be avoided. Spelling error of the word, "application". Structural error in the word, " appstore". The corrected sentence could be written as, "With this Nuwa project, you can also have the repairing power, fix your android application without have to publish a new APK to the App Store." Thank you.

    opened by RealWorldEdits376W 0
  • Sentence structure and Spelling error

    Sentence structure and Spelling error

    In the introductory paragraph, the second line is written as, " With this Nuwa project,you can also have the repairing power, fix your android applicaiton without have to publish a new APK to the appstore." There is an extra space after the 'Nuwa project,' which needs to be avoided. Spelling error of the word, "application". Structural error in the word, " appstore". The corrected sentence could be written as, "With this Nuwa project, you can also have the repairing power, fix your android application without have to publish a new APK to the App Store." Thank you.

    opened by RealWorldEdits376W 0
  • Error:Unsupported method: BaseConfig.getApplicationIdSuffix().

    Error:Unsupported method: BaseConfig.getApplicationIdSuffix().

    把代码clone下来导入AS,没有改过,报错 Error:Unsupported method: BaseConfig.getApplicationIdSuffix(). The version of Gradle you connect to does not support that method. To resolve the problem you can change/upgrade the target version of Gradle you connect to. Alternatively, you can ignore this exception and read other information from the model.

    opened by wangchenyan 1
  • java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

    java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

    问题描述

    =5.0 运行正常, 5.0以下版本运行出现java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation错误

    log

    W/dalvikvm(  362): Class resolved by unexpected DEX: Lso/contacts/hub/services/open/core/an;(0x41dc5ff8):0x60ca7000 ref [Lso/contacts/hub/services/open/core/ar;] Lso/contacts/hub/services/open/core/ar;(0x41dc5ff8):0x60d59000
    W/dalvikvm(  362): (Lso/contacts/hub/services/open/core/an; had used a different Lso/contacts/hub/services/open/core/ar; during pre-verification)
    W/dalvikvm(  362): threadid=1: thread exiting with uncaught exception (group=0x41689c80)
    E/AndroidRuntime(  362): FATAL EXCEPTION: main
    E/AndroidRuntime(  362): Process: com.putao.live, PID: 362
    E/AndroidRuntime(  362): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
    E/AndroidRuntime(  362): 	at so.contacts.hub.services.open.core.an.a(Unknown Source)
    E/AndroidRuntime(  362): 	at so.contacts.hub.services.open.ui.GoodsCreateOrderActivity.onCreate(Unknown Source)
    E/AndroidRuntime(  362): 	at android.app.Activity.performCreate(Activity.java:5304)
    E/AndroidRuntime(  362): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
    E/AndroidRuntime(  362): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
    E/AndroidRuntime(  362): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2331)
    E/AndroidRuntime(  362): 	at android.app.ActivityThread.access$1000(ActivityThread.java:143)
    E/AndroidRuntime(  362): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
    E/AndroidRuntime(  362): 	at android.os.Handler.dispatchMessage(Handler.java:102)
    E/AndroidRuntime(  362): 	at android.os.Looper.loop(Looper.java:136)
    E/AndroidRuntime(  362): 	at android.app.ActivityThread.main(ActivityThread.java:5291)
    E/AndroidRuntime(  362): 	at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime(  362): 	at java.lang.reflect.Method.invoke(Method.java:515)
    E/AndroidRuntime(  362): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
    E/AndroidRuntime(  362): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
    E/AndroidRuntime(  362): 	at dalvik.system.NativeStart.main(Native Method)
    
    opened by phxuecan 0
Owner
Jason Ross
Jason Ross
dexposed enable 'god' mode for single android application.

What is it? Dexposed is a powerful yet non-invasive runtime AOP (Aspect-oriented Programming) framework for Android app development, based on the work

Alibaba 4.5k Dec 28, 2022
Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.

Tinker Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstalling apk. Getting started Add t

Tencent 16.6k Dec 29, 2022
AndFix is a library that offer hot-fix for Android App.

AndFix AndFix is a solution to fix the bugs online instead of redistributing Android App. It is distributed as Android Library. Andfix is an acronym f

Alibaba 6.9k Dec 29, 2022
xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.

(English Documents Available) C#下Lua编程支持 xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 xLua的突破 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的

Tencent 8.1k Jan 3, 2023
A hotfix library for Android platform, and not just this...

中文版 wiki (deprecated) changelog Amigo Service Platform (Amigo backend service is no longer supported) Amigo is a hotfix library which can fix everythi

eleme 1.4k Nov 25, 2022
A pure Kotlin/Multiplatform implementation of group operations on Curve25519.

curve25519-kotlin A pure Kotlin/Multiplatform implementation of group operations on Curve25519. Gradle Kotlin DSL: dependencies { implementation("

Andrey Pfau 9 Dec 22, 2022
Pure Java code generation tool for generating a fully functional ContentProvider for Android.

RoboCoP RoboCoP is a Java library that can generate a fully-functional ContentProvider from a simple JSON schema file. Get the latest version from our

Rain 246 Dec 29, 2022
Android & Pure Java library for sound manipulation

soundtransform Android & Pure Java library to shape a voice with an instrument. Table of Contents How to use the library FluentClient FluentClient sam

LiBe 42 Sep 12, 2021
Animated dark mode toggle button with Android & Pure Java. ☕

Dark-Toggle-Button Animated dark mode toggle button for Android Java. ☕ converted from kotlin to Java 201 lines: DarkToggleButton.java Android Demo In

knziha 2 Mar 13, 2022
A Simple Todo app design in Flutter to keep track of your task on daily basis. Its build on BLoC Pattern. You can add a project, labels, and due-date to your task also you can sort your task on the basis of project, label, and dates

WhatTodo Life can feel overwhelming. But it doesn’t have to. A Simple To-do app design in flutter to keep track of your task on daily basis. You can a

Burhanuddin Rashid 1k Jan 1, 2023
Template (pure) for KMM application with DI support

KMM di template Template (pure) for KMM application with DI support. Uses Multiplatform-DI for Dependency Injection Features Common architecture (VIP)

Anna Zharkova 8 Oct 18, 2022
:sound: [Android Library] Easily generate pure audio tone of any frequency in android

Android library to easily generate audio tone in android. Generating pure tone of an specific frequency was never that easy. ZenTone does all the heav

Nishant Srivastava 102 Dec 19, 2022
🚀 React Native Segmented Control, Pure Javascript for iOS and Android

Installation Add the dependency: npm i react-native-segmented-control-2 Peer Dependencies Zero Dependency ?? Usage Import import SegmentedControl from

FreakyCoder 11 Nov 10, 2022
Android Word/Letter Tracing SDK is a complet solution to build apps for kids learning in pure kotlin

Android Word/Letter Tracing SDK is a complet solution to build apps for kids learning in pure kotlin. It supports all kind of shapes and all language letters e.g. english, arabic, Urdu, hindi etc.

null 9 Oct 16, 2022
A pure-Kotlin library for bots to interface with Revolt

RevoltKt A pure-Kotlin library for bots to interface with Revolt Sample Usage import me.maya.revolt.defaultClientBuilder import me.maya.revolt.events.

Maya 8 May 20, 2022
Lightweight service for creating standalone mock, written in pure Kotlin with Netty container.

MockService The lightweight service for creating a standalone mock, written in pure Kotlin with Netty container. The service allows getting config fil

null 2 Oct 28, 2021
QRCode Generator implemented in pure Kotlin

Creating QRCodes in Kotlin and Java is harder than it should be. QRCode-Kotlin aims to bring a simple, straightforward and customizable way to create QRCodes into the JVM domain, especially in the backend.

Rafael Lins 42 Dec 28, 2022
sql-delight example, a plugin by Square which is pure kotlin and it is useful in kmm

Sql-Delight-Example01 Developed by Mahdi Razzaghi Ghaleh first example of sql-delight What is SqlDelight? Kotlin Multiplatform is one of the most inte

rq_mehdi 0 Jan 24, 2022
LiteHttp is a simple, intelligent and flexible HTTP framework for Android. With LiteHttp you can make HTTP request with only one line of code! It could convert a java model to the parameter and rander the response JSON as a java model intelligently.

Android network framework: LiteHttp Tags : litehttp2.x-tutorials Website : http://litesuits.com QQgroup : 42960650 , 47357508 Android网络通信为啥子选 lite-htt

马天宇 829 Dec 29, 2022