Giter Site home page Giter Site logo

swissarmyknife's Introduction

SwissArmyKnife

SwissArmyKnife

SwissArmyKnife 是一款方便调试android UI的工具。可以直接在android设备屏幕上显示控件的相关信息。3.x版本对根View没有任何要求,可以是任意类型的view。 3.x需要弹窗权限。由于时间有限,暂未兼容Android5.0以下设备

接入方式

allprojects {
   	repositories {
   		...
   		maven { url 'https://jitpack.io' }
   	}
   }

dependencies {
           implementation 'com.github.android-notes.SwissArmyKnife:saklib:3.0.1-alpha1'
        
      
   }
 开启
 SAK.init(Application application, Config config)

备注:需要使用 me.weishu.reflection.Reflection.unseal(this);

功能界面

image

拾取控件

开启拾取控件选项后,拖动圆环到要拾取的控件位置即可。可以获取字体颜色,大小,背景色等信息(支持SpannableString)

image

相对距离

开启相对距离选项后,依次长按两个控件即可显示两个控件间的水平和竖直距离,距离默认单位是dp,可以通过功能界面的单位选项切换单位(该功能和编辑控件、移动控件功能冲突,请勿同时开启)

image

移动控件

开启移动控件选项后,长按控件即可拖动,距离默认单位是dp,可以通过功能界面的单位选项切换单位(该功能和编辑控件、移动控件功能冲突,请勿同时开启)

image

取色器

开启取色器选项后,会在屏幕显示 绿色圆环,可以任意拖动,屏幕下方会显示圆环中心的颜色值

image

水平直尺,竖直直尺

开启后会在屏幕显示水平直尺和竖直直尺,可以任意拖动。直尺上有两个值,一个单位是px,另一个是dp

image

外边距/内边距

开启后可以看到任意一个view的外边距,边距单位默认为dp,可以通过功能界面的单位选项切换单位。可以通过功能界面的层级区间过滤掉部分view,避免数值相互覆盖

image

宽高、字体大小、字体颜色、背景色等使用方式同 外边距/内边距,也可以通过 单位选项和层级区间进行控制

Fragment名称、Activity名称

开启后可以看到当前Activity的类名,每一个Fragment的类名。可以通过功能界面的层级区间过滤掉部分Fragment,避免Fragment名称相互覆盖

image

裁剪绘制范围

若内外边距、宽高、字体颜色等信息不显示,可以关闭 裁剪绘制。开启该功能可以避免 可以滚动的控件滚动后导致的信息覆盖。

swissarmyknife's People

Contributors

android-notes 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

swissarmyknife's Issues

内存泄露

0.0.2版本内存泄露很严重.

当页面关闭后的日志信息:
static com.wanjian.sak.CanvasManager.sCanvasManager

com.wanjian.sak.CanvasManager.mViewGroup

新版本为什么少了几个功能?

哈喽,同步到新版本发现少了几个功能如编辑控件、控件拾取、性能监控。
能讲一下为什么嘛?
前两个还挺好用的。

Android 11 启动崩溃

11-15 12:43:58.620 28639 28639 E AndroidRuntime: FATAL EXCEPTION: main
11-15 12:43:58.620 28639 28639 E AndroidRuntime: Process: com.wanjian.sak.demo, PID: 28639
11-15 12:43:58.620 28639 28639 E AndroidRuntime: java.lang.RuntimeException: InputChannel is not initialized.
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at android.view.InputEventReceiver.nativeInit(Native Method)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at android.view.InputEventReceiver.(InputEventReceiver.java:79)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.wanjian.sak.system.input.InputEventReceiverV29Impl.(InputEventReceiverV29Impl.java:21)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.wanjian.sak.system.input.InputEventReceiverCompact.get(InputEventReceiverCompact.java:23)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.wanjian.sak.Scaffold.observerInputEvent(Scaffold.java:55)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.wanjian.sak.Scaffold.access$200(Scaffold.java:21)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.wanjian.sak.Scaffold$1$1.run(Scaffold.java:39)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:938)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at android.os.Looper.loop(Looper.java:257)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8331)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
11-15 12:43:58.620 28639 28639 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1032)

功能更新

第二个版本测试版 已提交到master 和 ver2分支,具体更新详见 README.md

想要实现更多功能欢迎下面跟帖

Failed to resolve: com.wanjian:sak:0.0.2

你好,我想问一下为什么编译失败?

我在根目录build.gradle下dependencies中添加了这一行代码。
我的Android Studio版本是2.2。
classpath 'com.android.tools.build:gradle:2.1.2'
distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip

集成3.0.1alpha1出现crash

java.lang.RuntimeException: java.lang.NoSuchMethodException: android.graphics.RenderNode.setLeftTopRightBottom [int, int, int, int]
at com.wanjian.sak.system.rendernode.RenderNodeV29Impl.beginRecording(RenderNodeV29Impl.java:30)
at com.wanjian.sak.system.rendernode.RenderNodeV29Impl.beginRecording(RenderNodeV29Impl.java:9)
at com.wanjian.sak.layer.Layer.invalidate(Layer.java:58)
at com.wanjian.sak.layer.impl.GridLayer.onAttach(GridLayer.java:22)
at com.wanjian.sak.layer.Layer.attach(Layer.java:37)
at com.wanjian.sak.layer.LayerRoot.(LayerRoot.java:108)
at com.wanjian.sak.layer.LayerRoot.create(LayerRoot.java:26)
at com.wanjian.sak.Scaffold$1$1.run(Scaffold.java:36)
at android.os.Handler.handleCallback(Handler.java:900)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8393)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)

Failed to resolve: com.wanjian:sak:0.0.2

非常抱歉,之前上传的是收费版的包,试用期一个月,最近过期了,今天刚重新上传了永久版的,最迟应该明天就可以用了

Attribute ** has already been defined如何解决?

Error:(1065) Attribute "windowActionBar" has already been defined
Error:(1065) Attribute "windowNoTitle" has already been defined
Error:(1065) Attribute "windowActionBarOverlay" has already been defined
Error:(1065) Attribute "windowActionModeOverlay" has already been defined
Error:(1065) Attribute "windowFixedWidthMajor" has already been defined
Error:(1065) Attribute "windowFixedHeightMinor" has already been defined
Error:(1065) Attribute "windowFixedWidthMinor" has already been defined
Error:(1065) Attribute "windowFixedHeightMajor" has already been defined
Error:(1065) Attribute "windowMinWidthMajor" has already been defined
Error:(1065) Attribute "windowMinWidthMinor" has already been defined
Error:(1065) Attribute "actionBarTabStyle" has already been defined
Error:(1065) Attribute "actionBarTabBarStyle" has already been defined
Error:(1065) Attribute "actionBarTabTextStyle" has already been defined
Error:(1065) Attribute "actionOverflowButtonStyle" has already been defined
Error:(1065) Attribute "actionOverflowMenuStyle" has already been defined
Error:(1065) Attribute "actionBarPopupTheme" has already been defined
Error:(1065) Attribute "actionBarStyle" has already been defined
Error:(1065) Attribute "actionBarSplitStyle" has already been defined
Error:(1065) Attribute "actionBarTheme" has already been defined
Error:(1065) Attribute "actionBarWidgetTheme" has already been defined

程序运行后,点击悬浮窗一会就会堆栈溢出

java.lang.StackOverflowError
stack size 8MB

1 com.wanjian.sak.view.DrawingBoardView.dispatchTouchEvent(DrawingBoardView.java:49)
2 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2602)
3 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
4 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2602)
5 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
6 com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:413)
7 com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
8 android.app.Activity.dispatchTouchEvent(Activity.java:3061)
9 com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:375)
10 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2602)
11 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)

然后app马上卡死,只能重启。 Nexus 5x 7.0

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.