Android开发实践小结

简介: 作为一名搬运工,应该懂得避免重复创建轮子。 配置keystore密码信息 通常在app/build.gradle中我们会使用以下方式配置: signingConfigs { release { storeFile file("myapp.

作为一名搬运工,应该懂得避免重复创建轮子。

配置keystore密码信息

通常在app/build.gradle中我们会使用以下方式配置:

signingConfigs { 
  release {  
    storeFile file("myapp.keystore")  
    storePassword "mystorepassword"    
    keyAlias "mykeyAlias"        
    keyPassword "mykeypassword"   
  }
} 

但这种方法不是特别好,因为如果你把代码分享到github,你的密码就泄露了。

推荐的做法应该是在Androd项目中gradle.properties(如果没有则手动创建一个)文件中创建以下变量,这个文件是不会被版本控制系统提交的,所以不用担心密码泄露。

KEYSTORE_PASSWORD=mystorepassword
KEY_PASSWORD=mykeypassword

那么在app/build.gradle中的配置就应该是

signingConfigs {
    release {
        try {
            storeFile file("myapp.keystore")
            storePassword KEYSTORE_PASSWORD
            keyAlias "mykeyAlias"
            keyPassword KEY_PASSWORD
        }
        catch (ex) {
            throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.")
        }
    }
} 

这里在打包的时候,如果没有在gradle.properties配置相关变量,那么就会在messages窗口中提示

Error:(16, 0) You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.

包引用尽可能使用dependency而不是直接导入jar包

dependencies {
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
}

以下方式也是不推荐使用的 

dependencies {
    compile 'com.squareup.retrofit2:retrofit:2.1.0+'
}

这种方式每次编译时都会去联网检测最新的包,影响性能,还可能会下载跟你不符合需求的jar包。

为release版本和debug版本指定不同的包名

同一个应用而不同的包名可以同时安装在同一个手机里面。

可以参考以下配置

android {
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '-DEBUG'
        }
​
        release {
            // ...
        }
    }
}

分别为包名和版本号加上debugDEBUG后缀。

如果想要在版本号添加时间信息,有利于区分,可以这样处理:

1、首先在app/build.gralde中定义一个buildTime()函数

//定义build 时间
def buildTime() {
    Date date = new Date()
    String build = date.format("yyMMddHHmm", TimeZone.getDefault())
    return build
} 

2、然后再修改versionNameSuffix参数 

buildTypes {
        debug {
            //配置这包名后缀下可以同时安装release包和debug包
            applicationIdSuffix ".debug"
            //配置versionName后缀
            versionNameSuffix '_' + (buildTime()) + '-DEBUG'
            ...
        }
        release {
            ...
        }
    }

在debug包中定义了版本号

debug_packages_name

开发调试工具

Stetho

Stetho是facebook开源的Android调试工具,可以使用Chrome开发工具来对Android应用进行调试、抓包、查看Sqlite数据库等功能。可以在debug版本中集成Stetho,方便开发调试。

集成Stetho也是非常简单,只需要在app/build.gradle中配置

dependencies { 
    compile 'com.facebook.stetho:stetho:1.4.1' 
  } 

然后在Application里面初始化Stetho

public class MyApplication extends Application {
  public void onCreate() {
    super.onCreate();
    Stetho.initializeWithDefaults(this);
  }
}

这样就配置好了,AS连接手机跑起来后。打开Chrome,在地址栏输入

chrome://inspect/#devices 

这时候就看到手机调试的信息

inspect_devices

查看设备

debug

查看sqlite数据库

view-hierarchy

View Hierarchy

调试网络

目前Steho支持okhttp网络库,同样的在gradle里面配置

dependencies { 
    compile 'com.facebook.stetho:stetho:1.4.1' 
    compile 'com.facebook.stetho:stetho-okhttp3:1.4.1' 
    compile 'com.facebook.stetho:stetho-urlconnection:1.4.1'
} 

对OkHttp2.x版本

OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());

对OkHttp3.x版本 

new OkHttpClient.Builder()
    .addNetworkInterceptor(new StethoInterceptor())
    .build(); 

对于其他网络需要修改Stetho现在还没有支持,如果是HttpURLConnection,可以使用StethoURLConnectionManager来集成,详情可以参考Steho官网。

network

网络抓包

LeakCanary

LeakCanary可以在应用运行时检测应用是否有OOM风险的一个工具库。同样的可只在debug版本中集成。

app/build.gradle

dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
   releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
   testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
 }

Application

public class ExampleApplication extends Application {
​
  @Override public void onCreate() {
    super.onCreate();
    if (LeakCanary.isInAnalyzerProcess(this)) {
      // This process is dedicated to LeakCanary for heap analysis.
      // You should not init your app in this process.
      return;
    }
    LeakCanary.install(this);
    // Normal app init code...
  }
} 

这样就配置好了。连接手机AS跑完后就会在手机桌面上生成一个LeakCanary图标,点击进入可以方便查看变量在内存中的引用链。如果LeakCanary检测到有内存泄露,也会发送一个通知栏消息来提醒。

AS常用插件

很多App都会使用UI注解框架来初始化UI控件其中最有名的估计就是ButterKnife了。

class ExampleActivity extends Activity {
  @BindView(R.id.user) EditText username;
  @BindView(R.id.pass) EditText password;
​
  @BindString(R.string.login_error) String loginErrorMessage;
​
  @OnClick(R.id.submit) void submit() {
    // TODO call server...
  }
​
  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

但是经常写@BindView也是一件令人枯燥和烦恼的事情。

Android Butterknife Zelezny

这个插件可以极大的解放程序猿的双手,提高搬砖效率。

安装好插件后,把光标定位到layout文件的引用处,例如setContentView(R.layout.simple_activity);R.layout.simple_activity末尾处,按下快捷键command+N(windows是Altt+Insert)将弹出以下对话框。

butterknifezelezny

tools

so easy!


关注我们,可以获取更多

目录
相关文章
|
5天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
8天前
|
移动开发 Java Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第30天】在移动开发领域,随着用户需求的不断增长和设备性能的持续提升,实现流畅且高效的用户体验已成为开发者的首要任务。针对Android平台,Kotlin协程作为一种新兴的异步编程解决方案,以其轻量级线程管理和简洁的代码逻辑受到广泛关注。本文将深入探讨Kotlin协程的概念、优势以及在实际Android应用中的运用,通过实例演示如何利用协程提升应用性能和响应能力,为开发者提供一条构建更高效Android应用的实践路径。
|
8天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
9天前
|
监控 Java Android开发
安卓应用开发:打造高效用户界面的五大策略
【4月更文挑战第29天】 在安卓应用开发的世界中,构建一个既美观又高效的用户界面(UI)对于吸引和保留用户至关重要。本文将深入探讨五种策略,这些策略可以帮助开发者优化安卓应用的UI性能。我们将从布局优化讲起,逐步过渡到绘制优化、内存管理、异步处理以及最终的用户交互细节调整。通过这些实践技巧,你将能够为用户提供流畅而直观的体验,确保你的应用在竞争激烈的市场中脱颖而出。
|
1天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
9 1
|
1天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
7 0
|
1天前
|
移动开发 Java Android开发
Android应用开发:Kotlin语言的优势与实践
【5月更文挑战第7天】 在移动开发的世界中,Android平台的Kotlin语言以其高效、简洁的语法和强大的功能吸引了众多开发者。本文将深入探讨Kotlin语言的核心优势,并通过实际案例展示如何在Android应用开发中有效地运用这一现代编程语言。我们将从语言特性出发,逐步分析其在提升开发效率、改善代码质量以及增强应用性能方面的具体表现,为读者提供一个全面而细致的Kotlin应用开发指南。
|
2天前
|
Android开发
Android 盒子开发过程中遇到的问题及解决方法
Android 盒子开发过程中遇到的问题及解决方法
7 2
|
2天前
|
机器学习/深度学习 算法 Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第6天】 在现代移动应用的海洋中,用户经常面临信息过载的挑战。一个精心设计的通知管理系统对于提升用户体验至关重要。本文将探讨在安卓平台上如何实现一个高效的通知管理系统,包括最佳实践、系统架构设计以及性能优化技巧。通过分析安卓通知渠道和优先级设置,我们的目标是帮助开发者构建出既能吸引用户注意,又不会引发干扰的智能通知系统。
14 2
|
3天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库