Coder Social home page Coder Social logo

liweiwei2anna / stark Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ximsfei/stark

0.0 2.0 0.0 403 KB

Stark is a hot-fix framework for Android. It supports swapping new implementations of classes without restarting a running Android application, and updated Android resources (icons, layout, etc) while only restarting the Android Activity. Most importantly, there is no private API invoked in Stark.

License: Apache License 2.0

Shell 0.04% Java 67.15% Groovy 32.80% QMake 0.02%

stark's Introduction

logo

release build pr license

Stark is a hot-fix framework for Android. It supports swapping new implementations of classes without restarting a running Android application, and updated Android resources (icons, layout, etc) while only restarting the Android Activity.

Sample Usage

  1. git clone https://github.com/ximsfei/Stark.git
  2. cd Stark
  3. ./gradlew :stark-sample:clean :stark-sample:assembleDebug
  4. adb install -r stark-sample/build/outputs/apk/debug/stark-sample-debug.apk
  5. Launch sample APK.
  6. Fix code and resources.

Fix Code

SecondActivity.java

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        content.setText("Code bug");
//        content.setText("aha, Code Bug Fix");
//        Toast.makeText(this, "fixed", Toast.LENGTH_SHORT).show();
    }
}

Fix Resources

strings.xml

    <string name="fix_text">Resources bug</string>
    <!--<string name="fix_text">Aha, Resources Bug Fix</string>-->

Change the TextView in activity_main.xml and activity_second.xml to Button.

  1. ./gradlew :stark-sample:clean :stark-sample:starkGeneratePatchDebug
  2. adb push stark-sample/build/outputs/apk/debug/stark-sample-debug.patch /sdcard/Android/data/com.ximsfei.stark.app/fix.apk
  3. Launch sample APK.
  4. Click the Button of applyPatch.
  5. Click the Button of recreate.
  6. Observe whether the code and resources are fixed.

Getting Started

The Gradle Dependency is available via jCenter,

Firstly, add dependency directly in your root project's build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.ximsfei:stark-gradle:0.0.2'
    }
}

Secondly, apply com.ximsfei.stark plugin and add stark core dependencies in your Android application project's build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'com.ximsfei.stark'

dependencies {
    implementation 'com.ximsfei:stark-core:0.0.2'
    implementation 'io.sigpipe:jbsdiff:1.0'
}

Note: Stark depends on jbsdiff, you need add jbsdiff dependency in your build.gradle

Initialize stark framework in application's attachBaseContext:

public class YourApp extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        Stark.get().load(base);
    }
}

After got the patch file, invoke the applyPatchAsync method to apply patch.

public class AnyClass {
    public void applyPatch(Context context, String path) {
        Stark.get().applyPatchAsync(context, path);
    }
}

After adding the dependencies and apply plugin, refresh gradle project, stark plugin will add two more tasks for you:

You can find them in the gradle stark task group.

  1. starkBackup + BuildType

After running the assemble + BuildType, run the backup task can backup the files needed to generate the patch for you.

Even you can enable an automatic backup configuration in the stark.properties file.

  1. starkGeneratePatch + BuildType

When you find a bug in an online apk, you can fix the code and run the starkGeneratePatch + BuildType task to generate hot-fix patch.

The starkGeneratePatch + BuildType task relies on files backed up by the starkBackup + BuildType task.

ProGuard

-keep class com.ximsfei.stark.core.runtime.** {public *;}

Configuration files

Also, the stark plugin will generate two configuration files in your Android application project dir:

stark.properties

# If autoBackup is true.
# Stark plugin will automatically backup the files needed to generate the patch.
# Otherwise, you need to run the stark backup task manually.
autoBackup=false

# If allStark is true.
# Stark plugin will inject redirection code into all BuildType(debug/release).
# You'd better disable this configuration at the development stage.
allStark=false

# If releaseStark is true.
# Stark plugin will inject redirection code into release stage.
releaseStark=true

# If your project needs to use multidex.
# You'd better get rid of the `multiDexEnabled = true` in build.gradle and enable it here.
multiDexEnabled=false

stark-rules.txt

# Add project specific stark rules here.
# include packages that need  to be fixed in the future.
# exclude packages that never to be fixed in the future.

-include: applicationId.

-exclude: android.support.

Contributing

For more information about contributing, see our contributing guide.

More

Thinks

Thanks to InstantRun, Tinker, Small, jbsdiff and Robust.

About Author

Pengfeng Wang(王鹏锋)

email: [email protected]

stark's People

Contributors

ximsfei avatar

Watchers

James Cloos avatar Ruby avatar

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.