A hotfix library for Android platform, and not just this...

Related tags

Hook android hotfix
Overview

中文版

wiki (deprecated)

changelog

Amigo Service Platform (Amigo backend service is no longer supported)

amigo.png

Amigo is a hotfix library which can fix everything for your Android app

How to use

Download

In your project's build.gradle

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'me.ele:amigo:0.6.8'
    }
}

In your module's build.gradle

apply plugin: 'me.ele.amigo'

android {
...
}

dependencies {
    ...
    compile 'me.ele:amigo-lib:0.6.7'
}

//if you don't want use amigo in dev, set this value to true
//you can define this extension in your mybuild.gradle as to distinguish debug & release build
amigo {
    disable false //default false
    autoDisableInInstantRunMode true // default false
}

Compatibility

  • Supports All Devices From ECLAIR 2.1 to Nougat 7.1
  • Even support next Android version, no matter small or big change. So Cool, Aha ✌️
  • Android 3.0 isn't supported

Customize loading page(optional)

Some time-consuming tasks are handled in a separate process to avoid ANR, you can customize the loading activity by add the follow code into your AndroidManifest.xml:

<meta-data
    android:name="amigo_layout"
    android:value="{your-layout-name}" />

<meta-data
    android:name="amigo_theme"
    android:value="{your-theme-name}" />

<meta-data
    android:name="amigo_orientation"
    android:value="{your-custom-orientation}"/>

Note:

  • These three meta-data is defined in your personal AndroidManifest.xml of app module if necessary
  • orientation's value must be in screenOrientation

Make hotfix work

There are two ways to make hotfix work.

  • if you don't need hotfix work immediately

    you just need to download new apk file, hotfix apk will be loaded as fresh as new when app restarts next time

     Amigo.workLater(context, patchApkFile, callback);
  • work immediately, App will restart immediately

     Amigo.work(context, patchApkFile);

Remove patch

Amigo.clear(context);

note:All patch files would be deleted on the next start up.

Demo

And there is an Demo page in the app demonstrating how to apply patch apk. Run the task ./gradlew runHost preparePatch, and navigate to the demo page.

Development

Amigo gradle plugin

The plugin was put into buildSrc directory, which means the plugin code change will work immediately each time you build.

Amigo lib

The amigo plugin will select the right amigo lib automatically.

Run tests

There are two gradle tasks provided in the app/build.gradle, :app:runHost, :app:preparePatch, which can accelerate development.

  • ./gradlew runHost, launch the host app
  • ./gradlew preparePatch, build and push the patch apk to the device
  • apply the patch apk in the Demo page

Limits

  • have to change the way using a content provider

    • declare a new provider: the authorities string must start with "${youPackageName}.provider"

      <provider
          android:name="me.ele.demo.provider.StudentProvider"
          android:authorities="${youPackageName}.provider.student" />
    • change the uri used to do the query, insert, delete operations:

      // 1. inside your app process, no modifications need:
      Cursor cursor = getContentResolver().query(Uri.parse("content://" + getPackageName() + ".provider.student?id=0"), null, null, null, null);
      // 2. in another process, have to change the authorities uri like the following :
      Cursor cursor = getContentResolver().query(Uri.parse("content://" + targetPackageName + ".provider/student?id=0"), null, null, null, null);
  • Instant Run conflicts with Amigo, so disable Instant Run when used with amigo(Or use autoDisableInInstantRunMode to auto disable amigo in instant run mode)

  • Amigo doesn't support Honeycomb 3.0

    • Android 3.0 is a version with full of bugs, & Google has closed Android 3.0 Honeycomb.
  • RemoteViews's layout change in notification & widgetis not support

    • any resource id in here should be used with java RCompat.getHostIdentifier(Context context, int id)

Retrieve hotfix file

  • make it simple, you just need a fully new apk

  • to save the internet traffic, you may just want to download a diff file bspatch (support whole apk diff & fine-grained diff in apk)is an option for you

Inspired by

Android Patch 方案与持续交付

DroidPlugin

License

  Copyright 2016 ELEME Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
Comments
  • 4.0.1版本 installHook会报异常

    4.0.1版本 installHook会报异常

    更新到最新4.0.1版本,应用补丁重启后会看到如下异常:

    HookFactory: installHook me.ele.amigo.hook.IActivityManagerHook@c58ef4a errorandroid.util.AndroidRuntimeException: Can not install IActivityManagerNative hook at me.ele.amigo.hook.IActivityManagerHook.onInstall(IActivityManagerHook.java:87) at me.ele.amigo.hook.HookFactory.installHook(HookFactory.java:23) at me.ele.amigo.hook.HookFactory.install(HookFactory.java:17) at java.lang.reflect.Method.invoke(Native Method) at me.ele.amigo.reflect.MethodUtils.invokeStaticMethod(MethodUtils.java:33) at me.ele.amigo.reflect.MethodUtils.invokeStaticMethod(MethodUtils.java:40) at me.ele.amigo.Amigo.installHook(Amigo.java:188) at me.ele.amigo.Amigo.runPatchApk(Amigo.java:158) at me.ele.amigo.Amigo.onCreate(Amigo.java:112) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

    opened by c1024 20
  • Unable to start activity ComponentInfo{com.sophpark.upark/me.ele.amigo.release.ApkReleaseActivity}

    Unable to start activity ComponentInfo{com.sophpark.upark/me.ele.amigo.release.ApkReleaseActivity}

    Process: com.sophpark.upark:amigo, PID: 13066 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sophpark.upark/me.ele.amigo.release.ApkReleaseActivity}: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class x at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7237) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class x at android.view.LayoutInflater.inflate(LayoutInflater.java:551) at android.view.LayoutInflater.inflate(LayoutInflater.java:429) at android.view.LayoutInflater.inflate(LayoutInflater.java:380) at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) at android.app.Activity.setContentView(Activity.java:2387) at me.ele.amigo.release.ApkReleaseActivity.onCreate(SourceFile:31) at android.app.Activity.performCreate(Activity.java:6876) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)  at android.app.ActivityThread.access$1100(ActivityThread.java:222)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7237)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class x at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  at android.view.LayoutInflater.inflate(LayoutInflater.java:380)  at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474)  at android.app.Activity.setContentView(Activity.java:2387)  at me.ele.amigo.release.ApkReleaseActivity.onCreate(SourceFile:31)  at android.app.Activity.performCreate(Activity.java:6876)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)  at android.app.ActivityThread.access$1100(ActivityThread.java:222)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7237)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.x" on path: DexPathList[[zip file "/data/app/com.sophpark.upark-1/base.apk"],nativeLibraryDirectories=[/data/app/com.sophpark.upark-1/lib/arm, /data/app/com.sophpark.upark-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at android.view.LayoutInflater.createView(LayoutInflater.java:595) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:68) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:706) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:774) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)  at android.view.LayoutInflater.inflate(LayoutInflater.java:498)  at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  at android.view.LayoutInflater.inflate(LayoutInflater.java:380)  at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474)  at android.app.Activity.setContentView(Activity.java:2387)  at me.ele.amigo.release.ApkReleaseActivity.onCreate(SourceFile:31)  at android.app.Activity.performCreate(Activity.java:6876)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)  at android.app.ActivityThread.access$1100(ActivityThread.java:222)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7237)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  Suppressed: java.lang.ClassNotFoundException: android.view.x at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 25 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

    amigo_layout更新布局

    `

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_upgrading"
        android:drawablePadding="@dimen/activity_margin_middle"
        android:textColor="@color/secondary_text"
        android:contentDescription="@string/app_name"/>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:layout_marginTop="@dimen/activity_margin_middle"
        android:orientation="horizontal">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/secondary_text"
            android:text="请稍后"/>
    
    </LinearLayout>
    

    `

    新旧版本apk只是versionCode进行了修改,

    opened by Witype 18
  • TV测试demo patch报错

    TV测试demo patch报错

    apply patch 失败,具体log如下: E/InputEventSender( 6959): Exception dispatching finished signal. E/MessageQueue-JNI( 6959): Exception in MessageQueue callback: handleReceiveCallback E/MessageQueue-JNI( 6959): java.lang.IllegalStateException: Could not execute method for android:onClick E/MessageQueue-JNI( 6959): at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) E/MessageQueue-JNI( 6959): at android.view.View.performClick(View.java:4447) E/MessageQueue-JNI( 6959): at android.view.View.onKeyUp(View.java:8254) E/MessageQueue-JNI( 6959): at android.widget.TextView.onKeyUp(TextView.java:5628) E/MessageQueue-JNI( 6959): at android.view.KeyEvent.dispatch(KeyEvent.java:2894) E/MessageQueue-JNI( 6959): at android.view.View.dispatchKeyEvent(View.java:7678) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:376) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/MessageQueue-JNI( 6959): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2035) E/MessageQueue-JNI( 6959): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1505) E/MessageQueue-JNI( 6959): at android.app.Activity.dispatchKeyEvent(Activity.java:2454) E/MessageQueue-JNI( 6959): at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534) E/MessageQueue-JNI( 6959): at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) E/MessageQueue-JNI( 6959): at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:241) E/MessageQueue-JNI( 6959): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1962) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3905) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3875) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3439) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3489) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3458) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3568) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3466) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3628) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3439) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3489) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3458) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3466) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3439) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3489) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3458) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3604) E/MessageQueue-JNI( 6959): at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3767) E/MessageQueue-JNI( 6959): at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2022) E/MessageQueue-JNI( 6959): at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1716) E/MessageQueue-JNI( 6959): at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1707) E/MessageQueue-JNI( 6959): at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1999) E/MessageQueue-JNI( 6959): at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) E/MessageQueue-JNI( 6959): at android.os.MessageQueue.nativePollOnce(Native Method) E/MessageQueue-JNI( 6959): at android.os.MessageQueue.next(MessageQueue.java:138) E/MessageQueue-JNI( 6959): at android.os.Looper.loop(Looper.java:140) E/MessageQueue-JNI( 6959): at android.app.ActivityThread.main(ActivityThread.java:5038) E/MessageQueue-JNI( 6959): at java.lang.reflect.Method.invokeNative(Native Method) E/MessageQueue-JNI( 6959): at java.lang.reflect.Method.invoke(Method.java:515) E/MessageQueue-JNI( 6959): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851) E/MessageQueue-JNI( 6959): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667) E/MessageQueue-JNI( 6959): Caused by: java.lang.reflect.InvocationTargetException: E/MessageQueue-JNI( 6959): at java.lang.reflect.Method.in D/AndroidRuntime( 6959): Shutting down VM W/TVM ( 6959): try to handle uncaught exception in bootstrap frame. E/TVM ( 6959): 0x43459a58 0x43454cf0 0x434553f0 0x683735f8 E/TVM ( 6959): uncaughtException Ljava/lang/ThreadGroup; D/TVM ( 6959): GC_TIME GC_ALLOC freed 442K, 15% free 6108K/7183K, objects(47575) D/TVM ( 6959): Sending VM heap info to DDM E/AndroidRuntime( 6959): FATAL EXCEPTION: main E/AndroidRuntime( 6959): Process: me.ele.app.amigo, PID: 6959 E/AndroidRuntime( 6959): java.lang.IllegalStateException: Could not execute method for android:onClick E/AndroidRuntime( 6959): at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) E/AndroidRuntime( 6959): at android.view.View.performClick(View.java:4447) E/AndroidRuntime( 6959): at android.view.View.onKeyUp(View.java:8254) E/AndroidRuntime( 6959): at android.widget.TextView.onKeyUp(TextView.java:5628) E/AndroidRuntime( 6959): at android.view.KeyEvent.dispatch(KeyEvent.java:2894) E/AndroidRuntime( 6959): at android.view.View.dispatchKeyEvent(View.java:7678) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:376) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408) E/AndroidRuntime( 6959): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2035) E/AndroidRuntime( 6959): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1505) E/AndroidRuntime( 6959): at android.app.Activity.dispatchKeyEvent(Activity.java:2454) E/AndroidRuntime( 6959): at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534) E/AndroidRuntime( 6959): at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) E/AndroidRuntime( 6959): at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:241) E/AndroidRuntime( 6959): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1962) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3905) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3875) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3439) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3489) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3458) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3568) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3466) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3628) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3439) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3489) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3458) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3466) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3439) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3489) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3458) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3604) E/AndroidRuntime( 6959): at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3767) E/AndroidRuntime( 6959): at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2022) E/AndroidRuntime( 6959): at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1716) E/AndroidRuntime( 6959): at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1707) E/AndroidRuntime( 6959): at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1999) E/AndroidRuntime( 6959): at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) E/AndroidRuntime( 6959): at android.os.MessageQueue.nativePollOnce(Native Method) E/AndroidRuntime( 6959): at android.os.MessageQueue.next(MessageQueue.java:138) E/AndroidRuntime( 6959): at android.os.Looper.loop(Looper.java:140) E/AndroidRuntime( 6959): at android.app.ActivityThread.main(ActivityThread.java:5038) E/AndroidRuntime( 6959): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 6959): at java.lang.reflect.Method.invoke(Method.java:515) E/AndroidRuntime( 6959): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851) E/AndroidRuntime( 6959): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667) E/AndroidRuntime( 6959): Caused by: java.lang.reflect.In I/Process ( 6959): Sending signal. PID: 6959 SIG: 9 W/ActivityManager( 548): Force finishing activity me.ele.app.amigo/.DemoActivity I/ActivityManager( 548): Process me.ele.app.amigo (pid 6959) has died.

    opened by ghost 13
  • 集成不够详细,按照步骤来,报错详情

    集成不够详细,按照步骤来,报错详情

    java.lang.RuntimeException: Unable to create application me.ele.amigo.Amigo: java.lang.RuntimeException: java.lang.ClassNotFoundException: Didn't find class "me.ele.amigo.acd" on path: /data/app/com.example.testrxjava-13.apk at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4705) at android.app.ActivityThread.access$1400(ActivityThread.java:168) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1389) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:177) at android.app.ActivityThread.main(ActivityThread.java:5493) 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:1225) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041) at dalvik.system.NativeStart.main(Native Method)

    opened by WangManAndroid 12
  • 调用workLater后重启APP并没有开始修复APP

    调用workLater后重启APP并没有开始修复APP

    Log begin merge file installApkPath:/data/app/com.sophpark.upark-1/base.apk patchApkPath:/data/user/0/com.sophpark.upark/files/amigo/amigo_patch.apk Amigo Log:

    10-10 10:01:26.731 13644-13644/? E/Amigo: working checksum: 1585798850
    10-10 10:01:27.351 13644-13644/? E/Amigo: load dex process
    

    将apk文件下载到:/data/user/0/com.sophpark.upark/files/amigo/amigo_patch.apk Activity代码中调用如下代码

    boolean patchWorked = Amigo.hasWorked();
            if (!patchWorked) {
                Amigo.workLater(this, file);
                return;
            }
            int workingPatchVersion = Amigo.workingPatchVersion(getApplication());
            if (workingPatchVersion < CommonUtils.getVersionCode(getApplication(), file)) {
                Amigo.workLater(this, file);
            }
    

    在调用Amigo.workLater(this, file);方法后重启App,app并没有修复,如果直接调用Amigo.work(this, patchApkFile);是没有问题的,但是会有几个几秒的黑屏。谢谢!

    opened by Witype 12
  • Here is a bug with activity-alias

    Here is a bug with activity-alias

    Here's how to review bug with demo

    first. in AndroidManifest

    <activity
                android:name=".TestPatchedActivities"
                android:screenOrientation="portrait"/>
            <activity-alias
                android:name="ele.aaa.ele"
                android:targetActivity=".TestPatchedActivities">
                <intent-filter>
                    <action android:name="ele.aaa.ele"/>
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity-alias>
    

    Second. startactivity

    public void testPatchedActivities(View v) {
            startActivity(new Intent("ele.aaa.ele").putExtra("test", new
                    ParcelBean("jack", 1)));
        }
    

    Third. gradle runHost and gradlew preparePatch ,then let the patch effect

    Fourth. click Test patched activity then the app will crash.

    FATAL EXCEPTION: main Process: me.ele.app.amigo, PID: 29413 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{me.ele.app.amigo/ele.aaa.ele}: java.lang.ClassNotFoundException: Didn't find class "ele.aaa.ele" on path: DexPathList[[dex file "/data/data/me.ele.app.amigo/files/amigo/3384999164/dexes/classes.dex"],nativeLibraryDirectories=[/data/data/me.ele.app.amigo/files/amigo/3384999164/libs, /vendor/lib64, /system/lib64]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2371) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524) at android.app.ActivityThread.access$800(ActivityThread.java:167) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1417) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5536) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750) Caused by: java.lang.ClassNotFoundException: Didn't find class "ele.aaa.ele" on path: DexPathList[[dex file "/data/data/me.ele.app.amigo/files/amigo/3384999164/dexes/classes.dex"],nativeLibraryDirectories=[/data/data/me.ele.app.amigo/files/amigo/3384999164/libs, /vendor/lib64, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at me.ele.amigo.AmigoClassLoader.loadClass(AmigoClassLoader.java:64) at android.app.Instrumentation.newActivity(Instrumentation.java:1070) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2361) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524)  at android.app.ActivityThread.access$800(ActivityThread.java:167)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1417)  at android.os.Handler.dispatchMessage(Handler.java:111)  at android.os.Looper.loop(Looper.java:194)  at android.app.ActivityThread.main(ActivityThread.java:5536)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)  Suppressed: java.lang.ClassNotFoundException: ele.aaa.ele at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 14 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

    after work hard with Agmio ,I find the crash reason and fix it . This is the code (in AmigoCallback 84 line ). Is it all right? @JackCho

    if ((newActivityInfo = ActivityFinder.getActivityInfoInNewApp(context,
                            activityName)) != null) {
                        // TODO check intent filter ?
                        FieldUtils.writeDeclaredField(msg.obj, "activityInfo", newActivityInfo);
                        intent.setComponent(new ComponentName(context,newActivityInfo.name));
                    }
    
    opened by yang747046912 10
  • 每次尝试都完美的失败了,我心好累

    每次尝试都完美的失败了,我心好累

    不管是自己写 还是用云平台都完美的闪退 还有 boolean patchWorked = Amigo.hasWorked(); if (!patchWorked) { Amigo.work(this, patchApkFile); return; } Amigo.work(this, patchApkFile); 这段代码我看了很久 请大神指教这个判断有什么用....

    opened by sunkiha 10
  • 每次启动app到主界面后自动退出

    每次启动app到主界面后自动退出

    12-15 17:11:32.149 3839-4685/? E/ActivityManager: Invalid thumbnail dimensions: 576x576 12-15 17:11:32.151 4625-24001/? D/SplitWindowPolicy: updateActivityStateChanged: resumed=false, screenId=1, isScreenFull=true 12-15 17:11:32.153 4625-24001/? D/SplitWindowPolicy: topRunningActivity=ActivityInfo{38470a4b m.....KillSelfActivity}, taskId=32125, activityType=0, bIsSplit=false 12-15 17:11:32.155 1168-1168/? D/AmigoService: onHandleIntent: Intent { act=restart_main_process cmp=com.dxinfo.yanglao.family/me.ele.amigo.AmigoService } 12-15 17:11:32.155 3839-4723/? W/ActivityManager: Duplicate finish request for ActivityRecord{1e8e4eae u0 com.dxinfo.yanglao.family/.StartAppActivity t32125 f} 12-15 17:11:32.156 3839-4778/? W/ActivityManager: Duplicate finish request for ActivityRecord{2d3f17e3 u0 com.dxinfo.yanglao.family/.MainActivity t32125 f} 12-15 17:11:32.156 3574-3574/? I/Process: Sending signal. PID: 3574 SIG: 9 12-15 17:11:32.170 30094-30094/? I/[LGHome]EVENT: [Launcher.java:5846:onWindowFocusChanged()]onWindowFocusChanged() hasFocus true 12-15 17:11:32.170 30094-30094/? I/PhoneWindow: [setNavigationBarColor] color=0x 0 12-15 17:11:32.172 3839-4648/? W/InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@17076372 attribute=null, token = android.os.BinderProxy@55ef654 12-15 17:11:32.181 3186-3186/? V/DPM: |COMMON:COM| there are 1 file descriptor(s) with events pending 12-15 17:11:32.181 3186-3186/? V/DPM: |COMMON:COM| 1 events pending, handling 17 for 21 12-15 17:11:32.181 3186-3186/? I/DPM: |COMMON:COM| fd '21' sent HUP. 12-15 17:11:32.181 3839-4778/? D/LocationManagerService: Location listener died 12-15 17:11:32.181 3186-3186/? V/DPM: |COMMON:COM| DpmCom::removeComEventHandler fd 21 12-15 17:11:32.181 3839-4778/? I/LocationManagerService: remove 38a6736a 12-15 17:11:32.181 3186-3186/? V/DPM: |COMMON:COM| waiting on events (-1ms) 12-15 17:11:32.183 3839-4741/? D/GpsStatusListenerHelper: Remote Listener died: android.location.IGpsStatusListener$Stub$Proxy@2a9e43c3 12-15 17:11:32.185 3839-4071/? W/InputDispatcher: channel '25e72710 com.dxinfo.yanglao.family/com.dxinfo.yanglao.family.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9 12-15 17:11:32.185 3839-4071/? E/InputDispatcher: channel '25e72710 com.dxinfo.yanglao.family/com.dxinfo.yanglao.family.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 12-15 17:11:32.188 3839-4814/? I/WindowState: WIN DEATH: Window{25e72710 u0 com.dxinfo.yanglao.family/com.dxinfo.yanglao.family.MainActivity} 12-15 17:11:32.188 3839-4814/? W/InputDispatcher: Attempted to unregister already unregistered input channel '25e72710 com.dxinfo.yanglao.family/com.dxinfo.yanglao.family.MainActivity (server)' 12-15 17:11:32.197 3839-4814/? D/InputDispatcher: Window went away: Window{25e72710 u0 com.dxinfo.yanglao.family/com.dxinfo.yanglao.family.MainActivity} 12-15 17:11:32.216 3839-4722/? I/ActivityManager: Process com.dxinfo.yanglao.family (pid 3574) has died 12-15 17:11:32.216 3839-4722/? W/ActivityManager: Scheduling restart of crashed service com.dxinfo.yanglao.family/.service.LocationService in 64000ms 12-15 17:11:32.219 3839-4722/? D/SplitWindowManager: Need to update ActivityRecord{2eaf0b4e u0 com.android.providers.downloads.ui/.DownloadList t32103} to ActivityStack{1f45e0fc stackId=1, 30 tasks}

    删除重新安装app后,就正常了

    opened by 320749903 10
  • RuntimeException Unable to create application me.ele.amigo.Amigo: java.lang.RuntimeException: java.lang.SecurityException: uid 10077 cannot explicitly add accounts of type: com.bizzypulse.bizzypulse

    RuntimeException Unable to create application me.ele.amigo.Amigo: java.lang.RuntimeException: java.lang.SecurityException: uid 10077 cannot explicitly add accounts of type: com.bizzypulse.bizzypulse

    I have received this error in my app's Crashlytics dashboard and i am attaching full log.

    Fatal Exception: java.lang.RuntimeException: Unable to create application me.ele.amigo.Amigo: java.lang.RuntimeException: java.lang.SecurityException: uid 10077 cannot explicitly add accounts of type: com.bizzypulse.bizzypulse at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4714) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5421) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by java.lang.RuntimeException: java.lang.SecurityException: uid 10077 cannot explicitly add accounts of type: com.bizzypulse.bizzypulse at me.ele.amigo.Amigo.onCreate(Amigo.java:94) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4711) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5421) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by java.lang.SecurityException: uid 10077 cannot explicitly add accounts of type: com.bizzypulse.bizzypulse at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at android.accounts.IAccountManager$Stub$Proxy.addAccountExplicitly(IAccountManager.java:890) at android.accounts.AccountManager.addAccountExplicitly(AccountManager.java:712) at com.bizzypulse.bizzypulse.sync.SyncUtils.createSyncAccount(SyncUtils.java:37) at com.bizzypulse.bizzypulse.BizzyApplication.setupSync(BizzyApplication.java:313) at com.bizzypulse.bizzypulse.BizzyApplication.setUpApp(BizzyApplication.java:188) at com.bizzypulse.bizzypulse.BizzyApplication.onCreate(BizzyApplication.java:92) at me.ele.amigo.Amigo.runOriginalApplication(Amigo.java:310) at me.ele.amigo.Amigo.onCreate(Amigo.java:59) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4711) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5421) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

    opened by atulgoswami21 9
  • handleLaunchActivity FAIL

    handleLaunchActivity FAIL

    1、出现这个npe是什么造成的?

    E/AmigoCallback: handleLaunchActivity FAIL java.lang.NullPointerException at me.ele.amigo.utils.component.ActivityFinder.getNewLauncherComponent(ActivityFinder.java:67) at me.ele.amigo.AmigoCallback.handleLaunchActivity(AmigoCallback.java:72) at me.ele.amigo.AmigoCallback.handleMessage(AmigoCallback.java:34) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)

    2、能不能在使用workLater这个修复方式时 修复完成那块 发一个LocalBroadcast这样的广播通知一下 private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case WHAT_DEX_OPT_DONE: isReleasing = false; String checksum = (String) msg.obj; doneDexOpt(checksum); saveDexAndSoChecksum(checksum); context.getSharedPreferences(SP_NAME, Context.MODE_MULTI_PROCESS) .edit() .putString(Amigo.WORKING_PATCH_APK_CHECKSUM, checksum) .commit(); handler.sendEmptyMessageDelayed(WHAT_FINISH, DELAY_FINISH_TIME); break; case WHAT_FINISH: System.exit(0); Process.killProcess(Process.myPid()); break; default: break; } } };

    opened by wznshuai 9
  • IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data

    IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data

    I have added a new provider to fix Uri permission in Nouget.

    <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="com.bizzypulse.bizzypulse.provider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths"/>
            </provider>
    

    and used

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                                       FileProvider.getUriForFile(host, host.getApplicationContext().getPackageName() + ".provider", createImageFile()));
                               getView().startActivityForResult(cameraIntent, CAMERA_REQUEST);
    

    in place of

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(createImageFile()));
    getView().startActivityForResult(cameraIntent, CAMERA_REQUEST);
    

    and also added provider_paths in xml folder with content

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
    </paths>
    

    but after applying patch it gives me IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data.

    opened by atulgoswami21 8
  • Cannot invoke method doFirst() on null object

    Cannot invoke method doFirst() on null object

    按照文档提示加入gradle文件的集成语句后编译,报这个错,编译不过。 麻烦看下什么原因导致

    相关版本信息: classpath 'me.ele:amigo:0.6.8' compile 'me.ele:amigo-lib:0.6.7' apply plugin: 'me.ele.amigo' compileSdkVersion 25 buildToolsVersion '26.0.2' targetSdkVersion 23

    opened by santarget 3
  • patch another apk file from url content shows only the main apk

    patch another apk file from url content shows only the main apk

    First of all, thanks very much for this lovely library. Could you kindly help me one issue?

    I'm trying to patch apk from url. Means that download apk from url and Amigo.work(this, downloadedAPK);

    But it doesn't work only shows the same apk.

    opened by fluckplayman 1
  • 补丁包下app中build配置信息异常。

    补丁包下app中build配置信息异常。

    在patch下android.os.Build类获取的信息异常。 BOARD:unknown BOOTLOADER:unknown BRAND:vivo CPU_ABI:x86 CPU_ABI2:armeabi-v7a DEVICE:PD1616 DISPLAY:vivo-userdebug 6.0.1 MOB31K eng.root.20171123.095810 test-keys FINGERPRINT:vivo/vivo/PD1616:6.0.1/MOB31K/root11230959:userdebug/test-keys HARDWARE:vivo HOST:ubuntu ID:MOB31K IS_DEBUGGABLE:true MANUFACTURER:unknown 我使用的是小米的设备,获取到的信息显示的是vivo,什么问题。。。

    opened by liu198754 3
Owner
eleme
eleme
This tool patches the CVE-2021-44228 Log4J vulnerability present in all minecraft versions NOTE THIS TOOL MUST BE RE-RUN after downloading or updating versions of minecraft as its not a perminent patch

WARNING THIS EXPLOIT EFFECTS BOTH CLIENTS AND SERVERS There is currently a exploit going around that affects all versions of Minecraft this exploit ab

Jacobtread 6 Aug 23, 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
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
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
Nuwa, pure java implementation, can hotfix your android application.

Nuwa 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 repair

Jason Ross 3k Dec 17, 2022
[Development stopped in 2014. Unfinished and not stable - not recommended to use.] An easy-to-use ViewPager subclass with parallax background effect for Android apps.

Development stopped in 2014 Not developed since 2014. Unfinished and not stable - not recommended to use. ParallaxViewPager An easy-to-use ViewPager s

Andras Kindler 437 Dec 29, 2022
Just a simple tool to turn on/off DND(Do Not Disturb) automatically when using specified apps.

AutoDND Just a simple tool to turn on/off DND(Do Not Disturb) automatically when using specified apps. Ever feel disturbed by notifications and maybe

null 6 May 24, 2022
The Destiny lore word game, that's definitely not just a worse version of Wordle!

Wormdle The Destiny lore word game, that's definitely not just a worse version of Wordle! Why not use an existing clone? Ever wanted to play Wordle, b

Ian Moore 2 Feb 6, 2022
The home of the amigo-platform which serves as the main service for the amigo multimedia platform

amigo-platform This is the home of the amigo-platform which serves as the main service for the amigo multimedia platform. Authentication with JWT Toke

null 1 Nov 22, 2021
Intellij-platform-plugin-template - IntelliJ Platform Plugin Template

IntelliJ Platform Plugin Template TL;DR: Click the Use this template button and

null 0 Jan 1, 2022
Extremely useful library to validate EditText inputs whether by using just the validator for your custom view or using library's extremely resizable & customisable dialog

Extremely useful library for validating EditText inputs whether by using just the validator (OtpinVerification) for your custom view or using library's extremely resizable & customisable dialog (OtpinDialogCreator)

Ehma Ugbogo 17 Oct 25, 2022
Form validation and feedback library for Android. Provides .setText for more than just TextView and EditText widgets. Provides easy means to validate with dependencies.

android-formidable-validation Form validation and feedback library for Android. Provides .setText for more than just TextView and EditText widgets. Pr

Linden 147 Nov 20, 2022
Android Country Picker is a Kotlin-first, flexible and powerful Android library that allows to integrate Country Picker with just a few lines.

1. Add dependency dependencies { implementation 'com.hbb20:android-country-picker:X.Y.Z' } For latest version, 2. Decide your use-case

Harsh B. Bhakta 65 Dec 6, 2022
*** WARNING: This library is no longer maintained *** An easy way to add a simple 'swipe-and-do-something' behavior to your `RecyclerView` items. Just like in Gmail or Inbox apps.

SwipeToAction An easy way to add a simple 'swipe-and-do-something' behavior to your RecyclerView items. Just like in Gmail or Inbox apps. Integration

Victor Calvello 223 Nov 16, 2022
Android library to display a ListView whose cells are not rigid but flabby and react to ListView scroll.

FlabbyListView This library is not maintained anymore and there will be no further releases Android library to display a ListView which cells are not

JPARDOGO 762 Nov 23, 2022
Android library to display a ListView whose cells are not rigid but flabby and react to ListView scroll.

FlabbyListView This library is not maintained anymore and there will be no further releases Android library to display a ListView which cells are not

JPARDOGO 762 Nov 23, 2022
Asynchronous socket, http(s) (client+server) and websocket library for android. Based on nio, not threads.

AndroidAsync AndroidAsync is a low level network protocol library. If you are looking for an easy to use, higher level, Android aware, http request li

Koushik Dutta 7.3k Jan 2, 2023