Android Studio 指定签名证书文件

1.先参照Android Studio中创建keystore生成指定的证书文件。

2.在app/build.gradle文件中增加signingConfigs字段:如下所示:

注意

1.storeFilestorePasswordkeyAliaskeyPassword缺一不可,都必须填写,并且填写正确。

如果没有填写keyAlias,则签名时候会报告Android-APK signing error : Failed to read key from keystore

密码不正确的时候,会报告java.security.UnrecoverableKeyException: Cannot recover key
This exception may result from the fact that you had provided a key password that was different from the keystore password

2.对于Release配置,在buildTypes中必须指定

否则,会出现

3.signingConfigs必须在buildTypes前面声明,否则会出现找不到配置选项的错误。

查看Keystore文件的签名信息/检查APK文件中的签名信息

  • 查看 keystore文件的签名信息

  • 检查APK文件中的签名信息

解压出apk中META-INF目录下的CERT.RSA文件,然后用keytool即可查看签名信息:

  • 比对签名是否一致

验证APK的签名是不是我们给定的签名文件的签名。

1.解压出apk中META-INF目录下的CERT.RSA文件.

2.执行如下命令:

Windows:

Linux:

比较两者输出的MD5字符串,是否一致即可。

Android Studio 1.5使用junit单元测试,以及“Test running startedTest running failed: Instrumentation run failed due to 'java.lang.RuntimeException' Empty test suite”

Android Studio 1.5创建的工程,会生成两个默认的测试目录:test,androidTest,其中,test目录为在本机执行单元测试代码的目录,androidTest为在Android设备上执行单元测试代码的目录。

目录如下图所示:

android_test_directory

对于新建的工程,默认会生成相应的测试代码例子。如下图所示:

android_unit_test_example_file

请注意上图的两个文件图标的差别,一个文件的图标的右上角是两个三角标记,另一个文件的右下角是个时钟的标记。

右击androidTest目录下的ApplicationTest.java,就会出现执行测试用例的菜单。如下图:

android_unit_test_run_test_menu

但是当右击test目录下的ExampleUnitTest.java则没有任何的运行菜单。如下图:

test_menu_no_run_or_debug_menu

那么,如何执行test目录下的ExampleUnitTest.java呢?

操作方法为"View"->"Tool Windows"->"Build Variants",然后,切换Test ArtifactAndroid Instrumentation TestsUnit Tests
如下图:

Build_Variants_Menu

切换Test Artifact

Build_Variants_Window

可以看到,切换完成后,两个文件的图标互换了一下:

UnitTest_File_Icon_Switch

此时右击test目录下的ExampleUnitTest.java则会出现Run 'ExampleUnitTest',Debug 'ExampleUnitTest'的菜单了。

如下图:

ExampleUnitTest_Run_Debug_Menu

至于

这个问题,是由于Android Studio 的BUG,导致的,一般是没有执行上述的切换命令,然后右击test目录下的ExampleUnitTest.java依旧会出现Run 'ExampleUnitTest',Debug 'ExampleUnitTest'的菜单,然后点击后,会让我们选择运行的设备,这个时候,明显是把我们当作可以在设备上运行的测试用例了,因此,找不到是必然的。

应对这个BUG的解决方法,就是清理代码,然后重新加载工程,一般可以解决这个问题了。

Android Studio编译报错“java.lang.OutOfMemoryError: GC overhead limit exceeded”

Android Studio编译报错 java.lang.OutOfMemoryError: GC overhead limit exceeded
详细的崩溃信息如下:

解决方法:

  • 如果在整个工程中生效,则在build.gradle中增加如下配置:
  • 如果只在单元测试的时候生效,则在build.gradle中增加如下配置:

Android Studio 1.5增加Stacktrace或debug选项输出详细编译错误

Android Studio 编译工程的时候,如果出现错误,会打印如下信息:

最后会提示,增加--stacktrace,--info--debug来获取更加详细的信息。

那么如何设置这些参数呢?如下操作即可:
"Android Studio"->"preferences-Build, Execution, Deployment"->"Compiler"
如下图所示:
Android_studio_settings_debug_info_option

com.android.dex.DexIndexOverflowException

现象描述


注意,本文描述的方案,仅在Android Studio 1.5,Gradle插件版本1.3.1中测试成立!

同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件。

编译时候产生如下的异常信息:

 


解决方案


Google给出的解决方案就是使用MultiDexApplication

    • Multidex Apps

      1.在项目的build.gradle文件的dependencies 节中添加分包设置:

      2.通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.

      3.如果没有创建自己的Application.class,直接在AndroidManifest.xml文件的Application声明中添加:

      如果实现了自己的Application.class,则修改继承的父类为
      android.support.multidex.MultiDex.MultiDexApplication

 

  • Multidex Apps单元测试

    1.在项目的build.gradle文件的dependencies 节中添加分包设置:

    2.通过在defaultConfig节中设置multiDexEnabled标签为true,开启multi-dexing支持.

 


参考链接


  1. Building Apps with Over 65K Methods
  2. Which package for MultiDexTestRunner? android.support.multidex or com.android.test.runner
  3. Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题

Android Studio 自动更新失败解决办法(2015-11-21,1.4.1升级1.5.0版本有效)

昨天在G+中看到Android Studio又有更新了就心血来潮想去更新体验一下,可是无论我怎么点Check Update却一直提示

,开始以为是由于G*W在捣乱,但是打开VPN后还是无法更新,然后开始Google了一下找到了下面的解决办法。

android-studio-update-error.png

Mac OSX

首先打开Finder在左边选择Application目录,在右边找到Android Studio.app,然后右击选择“显示包内容”如下图:

android_studio_in_finder

然后找到 Contents/bin/ 目录下的 .vmoptions 后缀的文件

mac-studio-vmoptions.png

Linux

找到 bin/ 目录下的 studio.vmoptions (32位系统) 或者 studio64.vmoptions (64位系统)文件

linux-studio-vmoptions.png

Windows

找到 bin/ 目录下的 studio.vmoptions (32位系统) 或者 studio64.exe.vmoptions (64位系统)文件

windows-studio-vmoptions.png

接着用自己趁手的编辑器打开 idea.vmoptions 或者 studio.vmoptions/studio64.vmoptions 或者 studio.exe.vmoptions/studio64.exe.vmoptions 文件添加如下内容:

保存后,重新打开Android Studio点击Check Update就会弹出更新信息提示了

android-studio-update-info

如果仍然无效,将url里的修改httphttps,然后重启点击Check Update试试~~~

剽窃地址 Android Studio 自动更新失败解决办法

android-ndk-r10e开启C++11,编译TEMP_FAILURE_RETRY错误

在使用select来操作socket的时候,一般都是会这么写

其中的“TEMP_FAILURE_RETRY”宏在“unistd.h”中的定义如下:

正常情况下,编译是没问题的。但是当在“Application.mk”中增加

之后,发现编译不通过了。报告“error: 'typeof' was not declared in this scope”。

解决方法:


“c++11”和“gnu++11”的差别:

“gnu++11”增加了很多的扩展“c++11”的功能,功能更加多,具体的扩展参考Extensions to the C++ Language

NDK下GCC定义__cplusplus不正确的问题

在C++升级之后,编译会出现“C++11 error: unable to find string literal operator 'operator"”这种错误,按照链接里面操作,在“android-ndk-r10e”上面依旧出现问题。

追踪了一下,才发现,这个是GCC的一个BUG,GCC-4.7,GCC-4.8中定义的__cplusplus 竟然都是 “__cplusplus=1”,这个是明显不正确的,具体的BUG内容查看“__cplusplus defined to 1, should be 199711L”。

尽管这个BUG已经修复了,但是很明显“android-ndk-r10e”使用的GCC版本并没有合并这个补丁。

解决方案

升级GCC到4.9,在”Application.mk“中增加