rovo89 / android_art

Android ART with modifications for the Xposed framework.
Other
369 stars 211 forks source link

Instrumentation detected, disabling framework #48

Open fashioncj opened 7 years ago

fashioncj commented 7 years ago

Hi,

I'm trying to run Monkey along with Emma to measure code coverage of the test cases. Emma is a tool which instrument applications in order to compute coverage criteria. In addition, I developed an Xposed module to record path information in log file. However, when I run the instrumented app using Monkey, I get the following message in the log file:

Instrumentation detected, disabling framework for "name of the app".

Is there any way to resolve this issue? Is this something general that I'm missing? That Xposed does not work on instrumented apps?

I appreciate your helps

Environment Android 5.1.0 on Genymotion with Xposed Framework 86


I also test it on Android 4.4 with both divilk and art with Xposed Framework 33 It show that a lot of Class ref in pre-verified class resolved to unexpected implementation Error

such as:

08-08 05:44:43.537 1507-1507/? W/ClassPathPackageInfoSource: Cannot load class. Make sure it is in your apk. Class name: 'com.example.helloworld.TabsActivity'. Message: com.example.helloworld.TabsActivity
                                                             java.lang.ClassNotFoundException: com.example.helloworld.TabsActivity
                                                                 at java.lang.Class.classForName(Native Method)
                                                                 at java.lang.Class.forName(Class.java:251)
                                                                 at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88)
                                                                 at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39)
                                                                 at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50)
                                                                 at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47)
                                                                 at android.test.SimpleCache.get(SimpleCache.java:31)
                                                                 at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72)
                                                                 at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
                                                                 at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
                                                                 at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
                                                                 at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
                                                                 at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
                                                                 at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
                                                                 at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
                                                                 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4319)
                                                                 at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
                                                                 at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
                                                                 at android.app.ActivityThread.handleBindApplication(Native Method)
                                                                 at android.app.ActivityThread.access$1500(ActivityThread.java:135)
                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                 at android.os.Looper.loop(Looper.java:136)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                 at java.lang.reflect.Method.invoke(Method.java:515)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                                 at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
                                                                 at dalvik.system.NativeStart.main(Native Method)
                                                              Caused by: java.lang.NoClassDefFoundError: com/example/helloworld/TabsActivity
                                                                 at java.lang.Class.classForName(Native Method) 
                                                                 at java.lang.Class.forName(Class.java:251) 
                                                                 at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88) 
                                                                 at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39) 
                                                                 at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50) 
                                                                 at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47) 
                                                                 at android.test.SimpleCache.get(SimpleCache.java:31) 
                                                                 at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72) 
                                                                 at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48) 
                                                                 at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61) 
                                                                 at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55) 
                                                                 at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156) 
                                                                 at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117) 
                                                                 at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102) 
                                                                 at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366) 
                                                                 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4319) 
                                                                 at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method) 
                                                                 at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631) 
                                                                 at android.app.ActivityThread.handleBindApplication(Native Method) 
                                                                 at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                 at android.os.Looper.loop(Looper.java:136) 
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5001) 
                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                                                                 at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
                                                                 at dalvik.system.NativeStart.main(Native Method) 
                                                              Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
                                                                 at dalvik.system.DexFile.defineClassNative(Native Method)
                                                                 at dalvik.system.DexFile.defineClass(DexFile.java:222)
                                                                 at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:215)
                                                                 at dalvik.system.DexPathList.findClass(DexPathList.java:322)
                                                                 at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
                                                                 at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
                                                                 at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
                                                                 at java.lang.Class.classForName(Native Method) 
                                                                 at java.lang.Class.forName(Class.java:251) 
                                                                 at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88) 
                                                                 at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39) 
                                                                 at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50) 
                                                                 at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47) 
                                                                 at android.test.SimpleCache.get(SimpleCache.java:31) 
                                                                 at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72) 
                                                                 at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48) 
                                                                 at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61) 
                                                                 at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55) 
                                                                 at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156) 
                                                                 at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117) 
                                                                 at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102) 
                                                                 at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366) 
                                                                 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4319) 
                                                                 at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method) 
                                                                 at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631) 
                                                                 at android.app.ActivityThread.handleBindApplication(Native Method) 
                                                                 at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                 at android.os.Looper.loop(Looper.java:136) 
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5001) 
                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                                                                 at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
                                                                 at dalvik.system.NativeStart.main(Native Method)

Regards, Fashioncj

wanam commented 7 years ago

Ignoring how Xposed will behave with instrumented apps, you can still disable this check (i already disabled it for Samsung Roms): https://github.com/rovo89/XposedBridge/blob/art/app/src/main/java/de/robv/android/xposed/XposedInit.java#L72

rovo89 commented 7 years ago

OK... I still haven't checked though why this was added initially. Also not sure if Dalvik is behaving in the same way.

fashioncj commented 7 years ago

I will try disable it first.

@rovo89 Maybe you can get some information from the error log

rovo89 commented 7 years ago

The error in the log might be related to instrumentation, not sure. Anyway, Xposed version 33 is ancient, please try it with the latest version (XposedBridge 58, I think).

fashioncj commented 7 years ago

@rovo89
I test XposedBridge 54, it also have same problem. Where is the XposedBridge 58 download url? Which task in gradle to general jar in project XposedBridge?

rovo89 commented 7 years ago

The latest Xposed version for KitKat is included in the 2.7 installer: http://repo.xposed.info/module/de.robv.android.xposed.installer It can't be built via Gradle, you have to use this branch and rename the APK to JAR: https://github.com/rovo89/XposedBridge/tree/master

fashioncj commented 7 years ago

@rovo89 I use Android Studio to build https://github.com/rovo89/XposedBridge/tree/master . How to general APK?

rovo89 commented 7 years ago

No idea, I always used Eclipse, but haven't built it since 2014.

You'll probably better off trying it on Lollipop/Marshmallow first. You can then build the default ("art") branch using "./gradlew app:assembleRelease".

fashioncj commented 7 years ago

@rovo89 I build art branch using that gradle command, But I just find an APK in \app\build\outputs\apk ,this APK is REALLY apk without sign. I have question that:

I flash the newest release xposed-v86-sdk22-x86.zip in 5.1.0 genymotion. It notice that Instrumentation detected, disabling framework ...., wanam said that Ignore it. So what should I do?

  1. Rebuild XposedBridge like XposedBridgeApi-54.jar and using it on my module?
  2. Rebuild XposedBridge as an APK install to genymotion
  3. Rebuild XposedBridge like XposedBridge.jar replace it in xposed-v86-sdk22-x86.zip and refresh it?
fashioncj commented 7 years ago

@rovo89 Can you help me to build an XposedBridge jar File or xposed-v86-sdk22-x86.zip zip file with art which comment two line at Line 75/76 in file XposedInit : //XposedBridge.disableHooks = true; //return;

Send it to me in anyway, or my emali is me@chenjia.me Thank you very much!!