- 博客(1902)
- 资源 (15)
- 收藏
- 关注
原创 Android配置build.gradle编译release包时以日期时间加序列号为Version Code且Version Code自动增长(二)
Android配置build.gradle编译release包时以日期时间加序列号为Version Code且Version Code自动增长(二)Android官方推荐以一个自然增长的整数值为Version Code,比如以基础数值1为基础,每次发一个release包时候Version值自增长1,于是Version Code以1,2,3,4,5,,,,这种样式的自然整数增长下去。然而有时候,...
2018-12-04 10:02:35 2037
原创 Android配置build.gradle实现Version Code编译release包时自动增长(一)
Android配置build.gradle实现Version Code编译release包时自动增长(一)经常的,开发者在上线发布之前要打出很多测试包给测试团队测试,每次打出的release包为了区分不同的版本号,需要手动的修改Android里面的配置文件build.gradle的versionCode字段,这一工作纯属于机械的手工修改,重复劳动,一不小心可能还会把版本号version cod...
2018-12-03 16:16:45 3609
原创 Java内存垃圾回收(Garbage Collection)机制基本方法和原则:System.gc()与finalize()
Java内存垃圾回收(Garbage Collection)机制基本方法和原则:System.gc()与finalize()Java一个对象的finalize()函数,是在当前对象被回收时才会调用。System.gc()暗示和提醒JVM开始垃圾回收。Java程序中显示调用System.gc() 搭配 Runtime.getRuntime().gc(),JVM并不一定马上就进行垃圾回收。这些方法...
2018-12-01 12:51:39 1038
原创 Android查看apk签名信息
Android查看apk签名信息把一个App应用程序的apk文件拿到手后,修改它的文件后缀名,比如原先的文件名叫做app.apk,把它改成app.zip,然后把它当做一个普通zip压缩文件解压,解压后得到以下文件结构:从META-INF文件目录下面,把ANDROID_.RSA(这个就是签名数据保存的文件)取出来,然后使用命令查看它:keytool -printcert -file A...
2018-11-28 18:55:01 10934 1
原创 Android Studio编译错误:Manifest merger failed with multiple errors, see logs
Android Studio编译错误:Manifest merger failed with multiple errors, see logs需要在AndroidManifest.xml中增加配置:tools:replace="label"<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="...
2018-11-15 22:08:24 5296
原创 Android LifecycleObserver & ScheduledThreadPoolExecutor用户可见时每隔3秒周期更新,用户不可见时暂停周期更新
Android LifecycleObserver & ScheduledThreadPoolExecutor用户可见时每隔3秒周期更新,不可见时暂停每隔3秒的周期更新简言之,当用户按home键把当前App切换至“后台”不可见时候(用户看不见当前App页面时候),暂停每隔3秒的周期更新操作。当用户又将App切换至前台,用户看到App页面时候,重启每隔3秒的周期性更新。关键是通过Life...
2018-11-13 10:44:32 737
原创 Android LifecycleObserver
package zhangphil.test;import android.arch.lifecycle.Lifecycle;import android.arch.lifecycle.LifecycleObserver;import android.arch.lifecycle.LifecycleRegistry;import android.arch.lifecycle.OnLif...
2018-11-12 16:33:50 2764
原创 Android逆向工程之apk加固后反编译AndroidManifest.xml
Android逆向工程之apk加固后反编译AndroidManifest.xmlAndroid编译生成的apk经过加固后,AndroidManifest.xml无法直接查看,直接打开是一堆乱码。在一些情况下, 又特别需要知道加固后的包中某个值最终形态,比如多渠道打包中,根据不同配置生成不同的渠道名,需要核实渠道名是否真的正确,这时候就需要通过Android的逆向工程,把加固后apk中包藏的me...
2018-11-08 11:11:08 7437 2
原创 git cherry-pick:复制多个提交commit到当前分支
git cherry-pick:复制多个提交commit到当前分支git cherry-pick的作用是合并不同分支的若干个commit到当前分支,这些若干个commit代码提交可以是不同分支的commit提交,如图:现在master分支打算把develop分支的C、D、E这三次提交复制到当前mater分支,那么首先需要从develop切换到分支到master:git checko...
2018-11-06 14:49:05 24879 3
原创 Java CompletableFuture simple example
private void test() { CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { System.out.println("开始休眠..."); ...
2018-11-03 14:40:53 348
原创 Apache Tomcat服务器安装配置和部署运行
Apache Tomcat服务器安装配置和部署运行在Windows 64位系统上安装配置和部署运行Apache Tomcat服务器。1,先下载适应于64为Windows操作系统的Tomcat服务器。连接:http://tomcat.apache.org/我下载的是:2,解压:3,配置Tomcat服务器的运行环境和Java环境。我是通过写bat批处理文件实现,不需要配...
2018-11-01 10:56:49 8844
原创 Android IPC进程间通信之AIDL双向通信
Android IPC进程间通信之AIDL双向通信假设现在有两个App,一个是作为服务器端的App称之为:Server。另一个是作为客户端端的App称之为:Client。Server对外提供计算服务,为连接上的客户端端App:Client提供计算服务,Server这个App接受客户端App:Client传递过来的两个整数,然后服务器端App:Server负责计算求和,然后Server把计算结...
2018-10-31 10:01:29 1640 2
原创 新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后执行一个线程动作(2)
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后执行一个线程动作(2)在附录3的基础上继续深化CyclicBarrier。假设这场龟兔赛跑的过程中,通过CyclicBarrier使得兔子和乌龟均到达400米赛点后,裁判员这时候也需要重启一个秒表计时功能记录当前时间,那么就可以通过CyclicBarrier的构造函数实现一个CyclicBarrier 的“内部线程”做...
2018-10-30 20:38:36 1062
原创 新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后再让全部线程处于一个起跑线(1)
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后再让全部线程处于一个起跑线(1)Java批量线程运行后,有的运行慢,有的运行快,CyclicBarrier让所有线程到达一定状态后继续接着执行。举一个龟兔赛跑的例子,兔子很快就可以到400米赛点,而乌龟跑的慢,很慢才到。现在要求兔子和乌龟必须都到达400米赛点时候才可以重启赛跑。CyclicBarrier的await(...
2018-10-29 10:02:17 1403
原创 新Java并发线程控制:CountDownLatch等待所有线程运行完毕才执行
新Java并发线程控制:CountDownLatch等待所有线程运行完毕才执行创建一批Java线程,然后这批Java线程几乎同时全部跑起来,但是有些开发场景下,开发者需要等到这些Java线程全部执行完毕后,才去执行接下去的业务流程。这个时候就可以CountDownLatch就可以派上用场,CountDownLatch是Java语言从1.5引入的线程控制类,* A synchronizat...
2018-10-28 12:32:46 1875 1
原创 新Java线程Semaphore:并行环境下访问竞争资源控制
新Java线程Semaphore:并行环境下访问竞争资源控制Semaphore是从Java 1.5引入的Java线程新内容。Semaphore实现在线程的竞争资源访问环境下,对资源的访问控制。只有申请(acquire)得到Semaphore的许可证的线程任务可以访问竞争资源。例如: private void test() { // 虽然有很多线程想访问某些资源,但...
2018-10-27 10:03:10 554
原创 Android配置build.gradle的 productFlavors区分加载若干套不同代码资源后的默认加载项
Android配置build.gradle的 productFlavors区分加载若干套不同代码资源后的默认加载项附录1解决了通过build.gradle配置productFlavors区分加载若干套不同代码资源,项目中有app_dev,app_test,app_pro: flavorDimensions "zhangphil_demo" productFlavors {...
2018-10-26 10:01:57 1904
原创 Android通过build.gradle配置productFlavors区分加载若干套不同代码资源
Android通过build.gradle配置productFlavors区分加载若干套不同代码资源Android在编译apk时候,有时候需要根据不同环境启用或关闭相应的代码资源文件。比如,工程代码中有一个Java写的Config文件,该文件在编译生成不同的包时候,虽然同样一个Config文件,但内容是不一样的。假设现在需要编译生成三种包,开发包(app_dev),测试包(app_test),...
2018-10-25 13:09:22 7258
原创 java.lang.UnsatisfiedLinkError: dlopen failed: "/data/xxxxx.so" has bad ELF magic
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/xxxxx.so" has bad ELF magic原因是引入的.so库未能做好兼容。解决方案是在defaultConfig里面增加:ndk { abiFilters "armeabi-v7a"}强制Android的ndk兼容armeabi-v7a体系架构。排除其...
2018-10-23 17:11:50 18251 2
原创 Android配置build.gradle的productFlavors多渠道打包
Android配置build.gradle的productFlavors多渠道打包Android在分发不同市场的release包时候,在中国经常会遇到各个不同市场需要编译打出一个不同apk包,这些不同的包在一些统计分析SDK中又是必需的,比如友盟统计分析,它需要根据写在Androidmanifest.xml的字段,如果针对每一个渠道都要去修改Androidmanifest.xml的值并重新打包...
2018-10-23 09:41:15 2284
原创 Android获取应用程序名称的稳定、可靠、简单方案
获取Android应用程序名称的稳定、可靠、简单方案在Android开发中,相信绝大多数Android开发者使用的是网络上盛传的这个方法获取应用程序名称的: /*** * 获取应用程序名称。 * @param context * @return */ public static String getAppName(Context co...
2018-10-22 18:31:20 1898
原创 Android配置build.gradle的productFlavors编译不同配置的apk包
Android配置build.gradle的productFlavors编译不同配置的apk包主要根app的build.grdle配置productFlavors: flavorDimensions "zhangphil_demo" productFlavors { app_dev { dimension "zhangphil_dem...
2018-10-22 17:23:07 1940
原创 Android通过Bluetooth蓝牙发送手机照片文件到Windows PC:Java实现
Android通过Bluetooth蓝牙发送手机照片文件到Windows PC:Java实现本文在《Android通过蓝牙发送数据到Windows PC电脑:Java实现(链接地址:https://blog.csdn.net/zhangphil/article/details/83146705 )》基础上改进代码,还是用Java实现把Android手机上的一张照片,通过Bluetooth蓝牙连...
2018-10-19 10:19:47 3034
原创 Android通过蓝牙发送数据到Windows PC电脑:Java实现
Android通过蓝牙发送数据到Windows PC电脑:Java实现Android手机设备之间通过蓝牙连接然后发送数据,这在我之前的蓝牙专栏里面有介绍,详情见专栏:https://blog.csdn.net/column/details/17325.html但是通常还有一种功能需求是Android手机如何通过蓝牙把数据传输到Windows PC上呢?这在需求还很常见,比如用户通过Andro...
2018-10-18 14:59:35 7102 2
原创 Java把一个文件转化为byte字节数组
Java把一个文件转化为byte字节数组 /** * 把一个文件转化为byte字节数组。 * * @return */ private byte[] fileConvertToByteArray(File file) { byte[] data = null; try { File...
2018-10-17 18:40:29 27066 2
原创 git diff比较不同commit版本的代码文件异同
git diff比较不同commit版本的代码文件异同 如图,假设像知道app目录下的build.gradle文件在两次commit(fee9f9cf4b和cdd577e352)之间的异同和变化,可是使用命令git diff:git diff fee9f9cf4b cdd577e352 app/build.gradle输出如图: 如果git diff后面只有两个co...
2018-10-16 19:02:57 24304
原创 Android Studio Offline work mode
Android Studio Offline work mode(离线模式)File - Settings - Gradle - 勾选 "Offline work"
2018-10-11 09:20:11 1944
原创 Java实现TCP/IP的ping连通性
Java实现TCP/IP的ping连通性import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class TestClass { public static void main(String[] args) { String netAddr...
2018-10-10 14:43:43 2507
原创 Java/Android的keytool查看Android keystore的md5值
Java/Android的keytool查看Android keystore的md5值Android发布正式的版本出去需要一个keystore文件签名,打包打出正式的包发行到市场。在有些第三方SDK中需要当前的这个App提供md5签名值(以支持第三方提供的服务如地图、分享功能等)。如何查看当前App经过正式的keystore签名打包后生成的md5或者哈希呢?很简单,一行简单的命令即可,例如...
2018-10-08 16:38:45 6653
原创 Android自定义文本输入框光标颜色
主要通过配置文本输入框如EditText的:android:textCursorDrawable属性完成。如果设置android:textCursorDrawable="@null"那么文本输入框的光标颜色将于配置的android:textColor颜色一样。如果开发者需要自定义输入光标的样式,则直接给android:textCursorDrawable设置一张自己制作的图...
2018-09-28 14:29:38 5523
原创 Android Fragment添加onTouchEvent监听
Android Fragment添加onTouchEvent监听Android原生的Fragment不像Activity一样有onTouchEvent这样的触摸事件监听,但是可以间接实现。实现的步骤:第一,首先在Fragment依附的Activity(假设这个Activity名为MainActivity)中增加接口和分发onTouchEvent: private Array...
2018-09-27 09:20:01 5094
原创 Android PopupWindow
代码:package zhangphil.test;import android.content.Context;import android.content.res.Resources;import android.graphics.Color;import android.os.Bundle;import android.support.annotation.Nullable...
2018-09-26 10:47:11 285
原创 Android通过PagerSnapHelper改造RecyclerView成“ViewPager”
Android通过PagerSnapHelper改造RecyclerView成“ViewPager”最新Android平台针对RecyclerView引入一个辅助类PagerSnapHelper,PagerSnapHelper可以把一个普通的RecyclerView改造成ViewPager,每一个RecyclerView的子item在翻动时候,像ViewPager一样。如代码:pac...
2018-09-25 11:29:55 7385 1
原创 Android滚轮实现LinearSnapHelper
Android滚轮实现LinearSnapHelperLinearSnapHelper可以帮助Android的RecyclerView实现滚轮效果,所谓滚轮效果,就是在列表内容滚动时候,总是把某一项内容处于屏幕(视野)正中间。本例特意把RecyclerView设置成水平方向,更容易观察出滚轮实现的效果。同时把RecyclerView的子item故意设置大一些,左右滑动时候的效果如图,可以看...
2018-09-21 16:33:31 7183
原创 Android通过MotionEvent仿真手指在屏幕单次点击事件
Android通过MotionEvent仿真手指在屏幕单次点击事件Android的View有一个方法performClick(),可人工模拟用户在手机屏幕上的点击事件,这次换一种方法,通过代码制造MotionEvent生产一次针对View的屏幕单次点击事件: private void simulateClick(View view, float x, float y) { ...
2018-09-19 10:29:33 5140 2
原创 RecyclerView、NestedScrollView嵌套子RecyclerView焦点抢夺引起子元素显示位置异常
RecyclerView、NestedScrollView嵌套子RecyclerView焦点抢夺引起子元素显示位置异常错误表现是子元素抢占焦点,使得嵌套的子RecyclerView滚动到自己位置。解决方案:在根滚动布局View(最顶层的RecyclerView、NestedScrollView)里面设置:android:focusableInTouchMode="true"andro...
2018-09-11 15:37:26 2509
原创 Android连续点击两次返回键退出App
Android连续点击两次返回键退出App private long firstTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { long secondTime = System.currentTimeMillis(); if (key...
2018-09-10 09:44:26 3543
原创 Android TabLayout选项卡点击选中Ripple水波纹
Android TabLayout选项卡点击时候选中的Ripple水波纹如果要实现自定义的TabLayout选项卡被点击选中时候的水波纹效果,要从xml属性定义中的:app:tabBackground入手,如果想取消掉TabLayout选项卡点击时候的Ripple水波纹效果,直接给app:tabBackground赋值为null即可:app:tabBackground="@null" ...
2018-09-08 11:44:19 3204 1
原创 git patch合并(同步、更新)两个不同分支中的单个文件
git patch合并两个不同分支中的单个文件 比如现在有两个分支:dev_0.0.1_zfdev_1.1.0_zf这两个分支是一个项目的不同版本分支。这两个分支中维护着一个相同的代码文件XinWenFragment.java。但是针对两个分支中的共同的代码文件XinWenFragment.java,在更新的分支dev_1.1.0_zf中做了新修改,现在需要把在新分支dev_1.1.0...
2018-08-31 18:23:08 8744
原创 Android Studio报错:Please configure Android SDK
Android Studio报错:Please configure Android SDK如图: 解决方案:点击 configure 进入工程结构,然后选择属性配置,在右侧的 Build Tools Vesion 任意选择一个版本,同步,就可以了。...
2018-08-31 13:51:05 8992 5
链家2020年9月二手房数据
2020-12-10
strava_com_sample_utf8.xls
2020-12-10
digital-7字体(LED数字样式字体)
2017-09-05
MaterialDesignLibrary_Code and Lib合集
2015-09-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人