Code Monkey home page Code Monkey logo

tinker-manager's Introduction

tinker-manager

license

Download

关于Tinker请移步: https://github.com/Tencent/tinker

服务器端部署文档. 客户端接入文档.

#License Apache License 2.0

CHANGELIST

server

v1.0.5 增加对debug工具的支持,在发布前可以先使用提供的debug工具调试,然后在全量发布
v1.0.6 补全包名时不在检查重复;解决ajax提交表单登录超时报系统异常的问题
v1.0.7 修复windows部署时路径的问题
v1.0.8 修复若干bug,如果使用老版本最好更新
v1.1.0 增加子账号管理功能,增加对App全量更新的支持
v1.2.0 增加错误日志上报

patchsdk

v1.0.7 修复patchsdk空指针错误
v1.0.8 增加对debug工具的支持
v1.0.9 优化对debug工具的支持
v1.1.0 修复bug增加容错处理
v1.1.4 1) 修改上报时机从patch success改到load success
	   2) targetSdkVersion>=23获取deviceId时READ_PHONE_STATE权限容错处理
v1.2.0 增加App全量更新支持
v1.2.6 增加错误日志上报

debugtool

v1.0.0 基础功能
v1.0.1 优化流程,增加自动更新的功能

war包下载. sdk下载. debug工具下载.

QQ群: 338491549

后台效果

补丁详情 上传补丁 发布补丁 应用列表 应用管理 测试人员管理 机型黑名单管理 App全量更新管理 子账号管理

tinker-manager's People

Contributors

fffffz avatar typ0520 avatar weinierfei 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

tinker-manager's Issues

佟亚鹏

我是你前同事,加我下qq 6840997

[Question] 补丁包查询下发

eg: 两个渠道 A B 分别打了补丁 patch A B. 版本号相同。
现在 发了补丁 patch A, 现在运行 B 渠道的 apk 仍会 PatchManager.getInstance().queryAndApplyPatch 下载到 A 渠道的 patch A。
目前没有通过 tinkerId 来查询下发?

Sample的清单文件中的SamplePatchService不应该设置为patch进程

Sample的清单文件中的SamplePatchService不应该设置为patch进程,这样会导致SamplePatchService的onPatchResult运行在patch进程,当执行到TinkerServiceInternals.killTinkerPatchServiceProcess(getApplicationContext());后就会杀掉patch进程,这样后面的所有代码都无法执行了。

已经解决编码出错的问题

修改conf/server.xml文件,找到

添加编码的 URIEncoding="UTF-8" 保存重启就行了
拿走不谢,只能说开发者太傻了

win7+tomcat6.0 -404异常

直接跑war包,建好数据库,配置好opt,在tom 6.0下面 运行 log日志没有异常也,就是访问不到。

HTTP Status 404 - /hotfix-console/
message /hotfix-console/
description The requested resource is not available.

我的tomcat在C:\Program Files\Apache Software Foundation\Tomcat 6.0
opt文件夹在C盘根目录
如果是opt找不到是不是,但是启动成功了 访问http://127.0.0.1:9010/应该是能访问得到呢?我看默认是这个地址

patchsdk中v4包的依赖

patchsdk中依赖了24.0.0的v4包,如果我的项目中出现其他版本的时候,就会有冲突;尝试排除patchsdk中的v4依赖,不知道24.0.0跟24.2.0有啥不一样的;排除以后竟然找不到通知相关的类了;能不能再下个版本发布的时候,给v4提供provided,让引用着自己在工程中compile对应的v4包?

Application onCreate 报错问题

Hi:
我先集成tinker sdk 后(正常使用) 再集成 tinker-manager的sdk 后打开app异常 日志如下:

12-14 10:42:57.811 23210-23210/com.xxx D/ResourcesManager: creating new AssetManager and set to /data/app/com.xxx-1/base.apk
12-14 10:42:57.831 23210-23210/com.xxx W/Tinker.TinkerLoader: tryLoadPatchFiles:patch dir not exist:/data/data/com.xxx/tinker
12-14 10:42:57.831 23210-23210/com.xxx D/Tinker.DefaultAppLike: onBaseContextAttached:
12-14 10:42:57.831 23210-23210/com.xxx D/Tinker.DefaultAppLike: onCreate
12-14 10:42:57.841 23210-23210/com.xxx W/Tinker.Tinker: tinker patch directory: /data/data/com.xxx/tinker
12-14 10:42:57.841 23210-23210/com.xxx I/Tinker.TinkerLoadResult: parseTinkerResult loadCode:-2
12-14 10:42:57.841 23210-23210/com.xxx W/Tinker.TinkerLoadResult: can't find patch file, is ok, just return
12-14 10:42:57.841 23210-23210/com.xxx I/Tinker.DefaultLoadReporter: patch load result, path:/data/data/com.xxx/tinker, code:-2, cost:3
12-14 10:42:57.841 23210-23210/com.xxx W/Tinker.Tinker: tinker load fail!
12-14 10:42:57.851 23210-23210/com.xxx D/AndroidRuntime: Shutting down VM
12-14 10:42:57.851 23210-23210/com.xxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xxx , PID: 23210
java.lang.RuntimeException: Unable to create application com.xxx.FHApplication: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:onCreate method not found
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5116)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
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:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:onCreate method not found
at com.tencent.tinker.loader.app.TinkerApplication.delegateMethod(TinkerApplication.java:183)
at com.tencent.tinker.loader.app.TinkerApplication.onCreate(TinkerApplication.java:192)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5113)
at android.app.ActivityThread.access$1600(ActivityThread.java:177) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5942) 
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:1400) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.tencent.tinker.loader.app.TinkerApplication.delegateMethod(TinkerApplication.java:181)
at com.tencent.tinker.loader.app.TinkerApplication.onCreate(TinkerApplication.java:192) 
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5113) 
at android.app.ActivityThread.access$1600(ActivityThread.java:177) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5942) 
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:1400) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:95)
at com.xxx.utils.ChannelUtil.getVersionCode(ChannelUtil.java:151)
at com.xxx.utils.ChannelUtil.getChannelFromSP(ChannelUtil.java:129)
at com.xxx.utils.ChannelUtil.getChannel(ChannelUtil.java:49)
at com.xxx.utils.ChannelUtil.getChannel(ChannelUtil.java:34)
at com.xxx.MyApplication.onCreate(MyApplication.java:168)
at com.xxx.ApplicationLike.onCreate(ApplicationLike.java:92)
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.tencent.tinker.loader.app.TinkerApplication.delegateMethod(TinkerApplication.java:181) 
at com.tencent.tinker.loader.app.TinkerApplication.onCreate(TinkerApplication.java:192) 
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5113) 
at android.app.ActivityThread.access$1600(ActivityThread.java:177) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5942) 
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:1400) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 
12-14 10:42:57.851 931-1317/? W/ActivityManager: Force finishing activity com.xxx/.ui.SplashActivity
12-14 10:42:57.851 931-1317/? D/FocusedStackFrame: Set to : 0
12-14 10:42:57.861 931-23228/? W/DropBoxManagerService: Dropping: data_app_crash (2371 > 0 bytes)
12-14 10:42:57.861 931-1317/? E/ActivityManager: Invalid thumbnail dimensions: 576x576

本地搭建环境出现乱码

本地环境搭建好后出现乱码现象
ç�¨æ�·å��æ ¼å¼�ä¸�正确(以å­�æ¯�å¼�头ï¼�é�¿åº¦å�¨5~18ä¹�é�´ï¼�å�ªè�½å��å�«å­�符ã��æ�°å­�å��ä¸�å��线)

Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:you must install tinker before get tinker sInstance

在客户端配置tinker的时候,我已经增加了

classpath "com.tencent.tinker:tinker-patch-gradle-plugin:${TINKER_VERSION}"
compile("com.tencent.tinker:tinker-android-lib:${TINKER_VERSION}") { changing = true }
provided("com.tencent.tinker:tinker-android-anno:${TINKER_VERSION}") { changing = true }

这个配置,但是还是提示我要install, 请问如何解决?

上传补丁包 , was not registered for synchronization because synchronization is not active

上传补丁包,
1.填写好补丁描述
2.选择好文件
3.点击创建
后台log日志,
网上的解决方法:需要在service上加注解@transactional,但是我用的是war.
请问是这个问题,还是其他的什么原因呢?
stat_minute 2018-03-28 10:17:00 ,minuteViewsCount: 0 ,minuteMaxViewsCount: 0
DispatcherServlet with name 'dispatcherServlet' processing POST request for [/hotfix-console/patch/add]
Looking up handler method for path /patch/add
Returning handler method [public org.springframework.web.servlet.ModelAndView com.dx168.patchserver.manager.web.ManagerController.patch_create(java.lang.String,java.lang.String,java.lang.String,org.springframework.web.multipart.MultipartFile)]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@493f8511] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@493f8511]
Skip CORS processing: request is from same origin
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5c243a1b] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5c243a1b]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4b1b213a] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4b1b213a]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e25c6e7] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6e25c6e7]
Requested media types are [text/html, application/xhtml+xml, image/webp, image/apng, application/xml;q=0.9, /;q=0.8] based on Accept header types and producible media types [/])
No matching bean found for view name 'redirect:/app/version?appUid=20180327192635128-6617&versionName=1.0.0&msg=%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E5%A4%B1%E8%B4%A5'
Returning redirect view [org.springframework.web.servlet.view.RedirectView: name 'redirect:/app/version?appUid=20180327192635128-6617&versionName=1.0.0&msg=%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E5%A4%B1%E8%B4%A5'; URL [/app/version?appUid=20180327192635128-6617&versionName=1.0.0&msg=%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E5%A4%B1%E8%B4%A5]]
Rendering view [org.springframework.web.servlet.view.RedirectView: name 'redirect:/app/version?appUid=20180327192635128-6617&versionName=1.0.0&msg=%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E5%A4%B1%E8%B4%A5'; URL [/app/version?appUid=20180327192635128-6617&versionName=1.0.0&msg=%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E5%A4%B1%E8%B4%A5]] in DispatcherServlet with name 'dispatcherServlet'
Successfully completed request
DispatcherServlet with name 'dispatcherServlet' processing GET request for [/hotfix-console/app/version]
Looking up handler method for path /app/version
Returning handler method [public org.springframework.web.servlet.ModelAndView com.dx168.patchserver.manager.web.ManagerController.app_version(javax.servlet.http.HttpServletRequest,java.lang.String,java.lang.String)]
Last-Modified value for [/hotfix-console/app/version] is: -1
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3765ac6a] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3765ac6a]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27dfbbb] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27dfbbb]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7766eebc] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7766eebc]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@188ac029] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@188ac029]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@66959d77] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@66959d77]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a144047] was not registered for synchronization because synchronization is not active
JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@7263e832]]] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a144047]
Requested media types are [text/html, application/xhtml+xml, image/webp, image/apng, application/xml;q=0.9, /;q=0.8] based on Accept header types and producible media types [/])
No matching bean found for view name 'version'
Returning [org.springframework.boot.web.servlet.view.velocity.EmbeddedVelocityToolboxView: name 'version'; URL [version.vm]] based on requested media type 'text/html'
Rendering view [org.springframework.boot.web.servlet.view.velocity.EmbeddedVelocityToolboxView: name 'version'; URL [version.vm]] in DispatcherServlet with name 'dispatcherServlet'

升级到AS3.0 Gradle4.1出现异常

Error:(8, 42) 错误: 程序包com.tencent.tinker.commons.resutil不存在
Error:(9, 42) 错误: 程序包com.tencent.tinker.commons.ziputil不存在
Error:(10, 42) 错误: 程序包com.tencent.tinker.commons.ziputil不存在
Error:(11, 42) 错误: 程序包com.tencent.tinker.commons.ziputil不存在

在包里好像没看到相关的类

关于TinkerInstaller.cleanPatch(context)的逻辑

#24

7.0 上系统清除补丁后重新打开会报错。

 E/Tinker.UncaughtHandler: catch exception when loading tinker:java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx.SplashActivity}:
 java.lang.RuntimeException: Unable to instantiate application xxxApplication: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                             at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:154)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                          Caused by: java.lang.RuntimeException: Unable to instantiate application xxx.xxx.xxx.xxxApplication: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed
                                                                             at android.app.LoadedApk.makeApplication(LoadedApk.java:802)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2574)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726at android.app.ActivityThread.-wrap12(ActivityThread.javaat android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477at android.os.Handler.dispatchMessage(Handler.java:102at android.os.Looper.loop(Looper.java:154at android.app.ActivityThread.main(ActivityThread.java:6119at java.lang.reflect.Method.invoke(Native Methodat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed
                                                                             at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:112)
                                                                             at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:118)
                                                                             at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:131)
                                                                             at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:146)
                                                                             at android.app.Application.attach(Application.java:189)
                                                                             at android.app.Instrumentation.newApplication(Instrumentation.java:1008)
                                                                             at android.app.Instrumentation.newApplication(Instrumentation.java:992)
                                                                             at android.app.LoadedApk.makeApplication(LoadedApk.java:796)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2574at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726at android.app.ActivityThread.-wrap12(ActivityThread.javaat android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477at android.os.Handler.dispatchMessage(Handler.java:102at android.os.Looper.loop(Looper.java:154at android.app.ActivityThread.main(ActivityThread.java:6119at java.lang.reflect.Method.invoke(Native Methodat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776Caused by: java.lang.reflect.InvocationTargetException
                                                                             at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                             at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                                                                             at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109)
                                                                             at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:118at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:131at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:146at android.app.Application.attach(Application.java:189at android.app.Instrumentation.newApplication(Instrumentation.java:1008at android.app.Instrumentation.newApplication(Instrumentation.java:992at android.app.LoadedApk.makeApplication(LoadedApk.java:796at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2574at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726at android.app.ActivityThread.-wrap12(ActivityThread.javaat android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477at android.os.Handler.dispatchMessage(Handler.java:102at android.os.Looper.loop(Looper.java:154at android.app.ActivityThread.main(ActivityThread.java:6119at java.lang.reflect.Method.invoke(Native Methodat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776

@see Tencent/tinker#213

TODO list

1、目前补丁下载是依赖版本号的,需要支持下发的补丁适用于多个版本的场景

mac下报系统异常

作者你好,按照安装步骤安装server,注册账号时候发现系统异常。在看tomcat日志时发现是mysql的连接异常。我在想会不会是配置文件没导入呢?
image

关于TinkerInstaller.cleanPatch(context)的逻辑

请教一下,PatchManager中关于TinkerInstaller.cleanPatch(context)的逻辑是后台删除补丁后执行的,这个执行执行完毕后,Tinker会报警告

it is not safety to clean patch when tinker is loaded, you should kill all your process after clean!

请问你们是怎么处理这块的逻辑的?

登录和注册错误

请问
登录和注册出现

尼玛,出错了......
系统异常

是什么问题

android6.0以上需要请求READ_PHONE_STATE权限

05-24 00:04:19.062 1752-1752/com.androidkit.demo E/Tinker.TinkerUncaughtExceptionHandler: uncaughtException:Unable to create application com.xxx.demo.DemoApplication: java.lang.SecurityException: getDeviceId: Neither user 10064 nor current process has android.permission.READ_PHONE_STATE.
05-24 00:04:19.062 1752-1752/com.xxx.demo W/Tinker.TinkerUncaughtExceptionHandler: tinker is not loaded
05-24 00:04:19.067 1752-1752/com.xxx.demo E/Tinker.UncaughtHandler: catch exception when loading tinker:java.lang.RuntimeException: Unable to create application com.xxx.demo.DemoApplication: java.lang.SecurityException: getDeviceId: Neither user 10064 nor current process has android.permission.READ_PHONE_STATE.
                                                                               at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5406)
                                                                               at android.app.ActivityThread.-wrap2(ActivityThread.java)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                               at android.os.Looper.loop(Looper.java:154)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                            Caused by: java.lang.SecurityException: getDeviceId: Neither user 10064 nor current process has android.permission.READ_PHONE_STATE.
                                                                               at android.os.Parcel.readException(Parcel.java:1684)
                                                                               at android.os.Parcel.readException(Parcel.java:1637)
                                                                               at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:4454)
                                                                               at android.telephony.TelephonyManager.getDeviceId(TelephonyManager.java:848)
                                                                               at com.dx168.patchsdk.utils.PatchUtils.getDeviceId(PatchUtils.java:37)
                                                                               at com.dx168.patchsdk.PatchManager.init(PatchManager.java:77)
                                                                               at com.xxx.demo.BaseApplicationLike.onCreate(BaseApplicationLike.java:67)
                                                                               at com.xxx.demo.DemoApplicationLike.onCreate(DemoApplicationLike.java:29)
                                                                               at com.tencent.tinker.loader.app.TinkerApplication.onCreate(TinkerApplication.java:173)
                                                                               at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
                                                                               at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5403)
                                                                               at android.app.ActivityThread.-wrap2(ActivityThread.java) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                               at android.os.Looper.loop(Looper.java:154) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

在baseApplicationLike里面的onCreate()方法中,

PatchManager.getInstance().init(getApplication(), "http://192.168.206.176:8080/hotfix-apis/", appId, appSecret, new ActualPatchManager() {
            @Override
            public void patch(Context context, String path) {
                TinkerInstaller.onReceiveUpgradePatch(context, path);
            }

            @Override
            public void cleanPatch(Context context) {
                TinkerInstaller.cleanPatch(context);
            }
        });

这个方法内部会调用PatchUtils.getDeviceId方法,这个方法需要先请求运行时权限才能够得到这个唯一的设备id

请问作者有什么好的建议吗?

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.