GithubHelp home page GithubHelp logo

nuwa's People

Contributors

jasonross avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nuwa's Issues

Android 6.0 上应用不能安装。

编译出的apk包在Android 6.0上无法安装,直接通过Android studio 运行的程序可以运行,且运行正常。5.0上也能正常。只提示应用无法安装。

hack .apk

请问这个apk是在里面起什么作用

一个小问题

根据Qzone那篇原始文章里面描述,需要对直接引用Hello的类(Sample中的MainActivity)进行消除CLASS_ISPREVERIFIED的操作,但在生成的patch.jar去只看到Hello本身的Hack字节码插入,这其中是什么原理?

声明plugin为library时,会 报错

如果做的是一个sdk的话
apply plugin: 'com.android.library',再声明apply plugin: "cn.jiajixin.nuwa"
就会报如下错
Could not find property 'applicationVariants' on com.android.build.gradle.LibraryExtension_Decorated@6de81701.
望解答

按照步骤 Task 'nuwaDebugPatch' not found in root project 'Nuwa-master'.

hudepeideMacBook-Pro:Nuwa-master HuDP$ ./gradlew clean nuwaDebugPatch -P NuwaDir=/Users/HuDP/Documents/nuwa
/Users/HuDP/Documents/nuwa/xiaomi/debug/mapping.txt does not exist
/Users/HuDP/Documents/nuwa/xiaomi/debug/hash.txt does not exist
/Users/HuDP/Documents/nuwa/xiaomi/release/mapping.txt does not exist
/Users/HuDP/Documents/nuwa/xiaomi/release/hash.txt does not exist
/Users/HuDP/Documents/nuwa/qihoo/release/mapping.txt does not exist
/Users/HuDP/Documents/nuwa/qihoo/release/hash.txt does not exist

FAILURE: Build failed with an exception.

  • What went wrong:
    Task 'nuwaDebugPatch' not found in root project 'Nuwa-master'.
  • Try:
    Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 6.76 secs

刚从坑里爬出来,严格来说,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'.

运行出错

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]

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

特定机型补丁没起效果

@jasonross 我在阿里云移动测试平台上面对Nuwa做了下兼容性测试,发现有个特定的机型补丁打了没起效果:http://mqc.aliyun.com。 机器型号是 三星 SM-N9108V 4.4.4 1440x2560 armeabi-v7a。下了logcat的输出文件看了一下,发现hack.dex和patch.dex都已经被成功解压放进了工程目录。有点怀疑dex载入顺序在某个节点被系统给重置回去了。

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

dalvikvm: Class resolved by unexpected DEX: Lcom/nashxk/MyApplication;(0xa54393b0):0x979f1000 ref [Lcom/nashxk/umeng/Umeng;] Lcom/nashxk/umeng/Umeng;(0xa54393b0):0x97874000
dalvikvm: (Lcom/nashxk/MyApplication; had used a different Lcom/nashxk/umeng/Umeng; during pre-verification)
AndroidRuntime: Shutting down VM
dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4b96648)
AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
   at com.nashxk.MyApplication.onCreate(Unknown Source)
   at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4444)
   at android.app.ActivityThread.access$1300(ActivityThread.java:141)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5103)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:525)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
   at dalvik.system.NativeStart.main(Native Method)

打正式版的包有了mapping.txt文件,补丁是按照demo那样打的。但是再次进应用的时候出现了这样的问题。

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

不支持新版本的gradle?

我将gradle版本修改为1.5后:classpath 'com.android.tools.build:gradle:1.5.0'
项目会报这个错 Error:Cannot get property 'taskDependencies' on null object
导致项目初始化失败!

dx --dex问题

为什么我用dx --dex --output=patch.apk patch生成的apk文件中没有dex文件呢。
不会生成classes.dex

打补丁的部分可以优化一下

打补丁的时候还需要准备一个excludeClass的列表比较麻烦,感觉可以在类里面增加一个标志,执行的时候发现class里有这个标志就跳过这个

放到自己项目没有生成patch文件

用你的demo成功了。
然后放到自己项目里面试了下,发现没生成patch文件,只生成了一个patch目录。命令行运行生成补丁的命令是成功的,但是就是没有文件出来。求解

Gradle编译问题

在build.gradle

设置 multiDexEnabled false
Nuwa编译不通过报错app:nuwaClassBeforeDexDebug FAILED

设置multiDexEnabled true
Nuwa编译通过,但是项目运行报错
ClassNotFoundException: Didn't find class "cn.jiajixin.nuwa.Hack" on path: DexPathList

java.lang.ClassNotFoundException: cn.jiajixin.nuwa.Hack 混淆后报错,不混淆没有问题

java.lang.NoClassDefFoundError: Failed resolution of: Lcn/jiajixin/nuwa/Hack;
com.activeandroid.app.Application.(Unknown Source)
com.liangrenwang.android.boss.base.AppApplication.(Unknown Source)
java.lang.reflect.Constructor.newInstance(Native Method)
java.lang.Class.newInstance(Class.java:1650)
android.app.Instrumentation.newApplication(Instrumentation.java:1003)
android.app.Instrumentation.newApplication(Instrumentation.java:988)
android.app.LoadedApk.makeApplication(LoadedApk.java:620)
android.app.ActivityThread.handleBindApplication(ActivityThread.java:5125)
android.app.ActivityThread.access$1600(ActivityThread.java:179)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1524)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:145)
android.app.ActivityThread.main(ActivityThread.java:5981)
java.lang.reflect.Method.invoke(Native Method)
java.lang.reflect.Method.invoke(Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

java.lang.ClassNotFoundException: Didn't find class "cn.jiajixin.nuwa.Hack" on path: DexPathList[[zip file "/data/app/com.liangrenwang.android.boss-1/base.apk"],nativeLibraryDirectories=[/data/app/com.liangrenwang.android.boss-1/lib/arm, /vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
java.lang.ClassLoader.loadClass(ClassLoader.java:511)
java.lang.ClassLoader.loadClass(ClassLoader.java:469)
com.activeandroid.app.Application.(Unknown Source) 
com.liangrenwang.android.boss.base.AppApplication.(Unknown Source) 
java.lang.reflect.Constructor.newInstance(Native Method) 
java.lang.Class.newInstance(Class.java:1650) 
android.app.Instrumentation.newApplication(Instrumentation.java:1003) 
android.app.Instrumentation.newApplication(Instrumentation.java:988) 
android.app.LoadedApk.makeApplication(LoadedApk.java:620) 
android.app.ActivityThread.handleBindApplication(ActivityThread.java:5125) 
android.app.ActivityThread.access$1600(ActivityThread.java:179) 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1524) 
android.os.Handler.dispatchMessage(Handler.java:102) 
android.os.Looper.loop(Looper.java:145) 
android.app.ActivityThread.main(ActivityThread.java:5981) 
java.lang.reflect.Method.invoke(Native Method) 
java.lang.reflect.Method.invoke(Method.java:372) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
java.lang.ClassNotFoundException: cn.jiajixin.nuwa.Hack

这个错误怎么解?是不是Nuwa初始化的代码需要做延时处理?还是其他什么办法?
求答案!Thanks

ART环境支持的不好

说说我在实战中遇到的问题

首先是混淆,打修复包时利用正式包的mapping,修复bug,修改了原先的类,改变的类会改变,但有些类没有改变也会因为混淆的关系产生变化(混淆会剔除一些无用的方法,打修复包时那些无用的方法可能会加上),这就造成了有些类没有修改,但也会出现在修复包中。

再次是平台兼容问题,以前一直以为可以完全兼容ART环境。如果仅仅是修复一个小bug,比如改变了一行输出。那么在Android4.0和5.0上都可以修复,但如果修复一个稍微复杂的bug,可能牵连到的类就比较多了,在4.0环境上可以修复,在5.0环境上直接引起了其它的问题,导致崩溃。

生成补丁的时候报$ANDROID_HOME is not defined

按照说明运行demo,但执行这句命令报错:
./gradlew clean nuwaQihooDebugPatch -P NuwaDir=/Users/zhangsan/Downloads/download_demo/nuwa
报的异常:
Caused by: org.gradle.api.InvalidUserDataException: $ANDROID_HOME is not defined

请问这个怎么解决?

运行报错,我重新写了一下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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.