小编Seb*_*ano的帖子

不要保持活动 - 它的用途是什么?

标题非常明显.我理解这个开发人员选项的作用.

不明白的是以下几点:

  1. 为什么首先引入该选项?
  2. 在框架多年来所见的所有变化之后,它仍然有用吗?

我很想知道这个选项背后的原因.

android android-activity

39
推荐指数
2
解决办法
5万
查看次数

Firebase和Crashlytics - 使用哪一个?

自Firebase崩溃报告发布以来,最突出的问题之一就是从Crashlytics转移到了没有.

比较两种崩溃报告服务有什么优缺点?

android firebase crashlytics crashlytics-android firebase-crash-reporting

16
推荐指数
2
解决办法
6660
查看次数

切换到Gradle:为什么我必须保持自定义视图不被混淆?

我正在将一个项目从Ant转移到Gradle,但有些东西我无法理解.


FACTS

在构建发布APK(即混淆)后,我注意到应用程序崩溃严重.错误可以通过以下方式总结:

java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
Run Code Online (Sandbox Code Playgroud)

调试(即非混淆)APK工作正常,所以我猜测它与我的ProGuard/DexGuard配置有关.

我试图通过添加以下语句来保持类引用:

-keep class com.mypackage.MyCustomView
Run Code Online (Sandbox Code Playgroud)

因此,发布APK工作得很好.然后我做了一些研究,我尝试了更具体的ProGuard/DexGuard配置:

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
Run Code Online (Sandbox Code Playgroud)

它也有效,而且与课程无关.


我想知道:

  1. 为什么我不需要处理是在使用Ant时?
  2. 出现错误的确切原因是什么?(按照第一个问题回答)

回答

@Blundell的答案基本上是正确的.结果我错过了build.gradle配置中的一行:

android {
  ...
  buildTypes {
    debug {
      ...
    }
    release {
        proguardFile getDefaultDexGuardFile('dexguard-release.pro') …
Run Code Online (Sandbox Code Playgroud)

android proguard android-custom-view android-gradle-plugin dexguard

10
推荐指数
1
解决办法
1091
查看次数

总是从毕加索的占位符中淡出

我仍然不知道这是错误报告还是功能请求,所以请耐心等待.

我正在使用Picasso而且我注意到示例应用程序总是从中淡出previous image(请参阅此处以获取我的意思).但是,我希望它总是从一个给定的淡入淡出placeholder.

我对这种行为的猜测是网格的视图被回收,毕加索在淡入实际图像之前没有设置占位符.

这是故意的吗?我怎么能总是从占位符淡入?

android fadein picasso

9
推荐指数
1
解决办法
5256
查看次数

通过签名比较 SSL 证书:够了吗?

我正在研究的系统架构需要比较两个 SSL/TLS(通常是 X.509)证书。也就是说,我需要验证两个证书是否相同。

我不在乎它们是否已过期或自签名,我只想确保它们没有以任何方式被更改。

执行此类操作的最正确方法是什么?比较这些证书的两个签名(两个字节[])就足够了,或者这个操作是否容易受到我目前尚未考虑的漏洞利用?

java android ssl-certificate

5
推荐指数
1
解决办法
2194
查看次数

使用Gradle自动递增versionCode时出现问题

我正在尝试配置应用程序的构建变体,作为从Ant迁移到Gradle的一部分.我想出的结构如下:

main
  |-> monkey
Run Code Online (Sandbox Code Playgroud)

我想要一种自动递增 "猴子"味道的版本代码的方法.我复制了AndroidManifest,因此它类似于下面的结构.我添加了两个版本代码和两个版本名称,我将用它来解释我面临的问题.

main
  |-> AndroidManifest.xml
        | -> versionName="mainFlavour"
        | -> versionCode=12
monkey
  |-> AndroidManifest.xml
        | -> versionName="monkeyFlavour"
        | -> versionCode=13
Run Code Online (Sandbox Code Playgroud)

第一种方法

我的第一次尝试是基于这个答案,包括定义一个解析AndroidManifest文件并增加版本代码的任务.该任务将是该任务的依赖generateBuildConfig项.

结果是每当我使用'monkey'风格构建时,读取版本代码和版本名称属性会导致此输出:

 versionName "monkeyFlavour"
 versionCode 12
Run Code Online (Sandbox Code Playgroud)

也就是说,构建版本具有'monkey'风格的版本名称,但是'main'风格的版本代码.使用PackageManagerBuildConfig读取这些值没有区别.这是我使用的代码:

// Increment version code for 'monkey' builds
task('increaseVersionCode') << {
    def manifestFile = file("src/monkey/AndroidManifest.xml")
    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
    def manifestText = manifestFile.getText()
    def matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionCode = Integer.parseInt(matcher.group(1))
    def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"") …
Run Code Online (Sandbox Code Playgroud)

android gradle android-manifest

5
推荐指数
0
解决办法
388
查看次数

为什么 AIDL/Messenger 绑定到服务?

场景:我有一个Controller(普通的 Java 类)必须能够引导多个Slaves。

ASlave的性质可以不同,因此它可以是:

  1. A Service,我们称之为 a ServiceSlave:这个对象的生命周期通常不同于应用程序的组件(比如,它不依赖于当前的活动)
  2. 一个简单的 Java 类,比如 a ObjectSlave:这个对象的生命周期在某种程度上绑定到它被创建的范围(比如,当前活动)

这两种类型的Slave共同点是它们可以驻留在不同的进程中


由于这最后一个“要求”,我立即将注意力转向AIDL/Messenger作为 aController和 a之间的通信形式Slave,因为它提供了 IPC。

然而,似乎AIDL(反过来Messenger,因为它也应该基于 AIDL)只有在您使用Service. 也就是说,我没有办法在AIDL没有IBinder对象的情况下实现基于 -based 的接口,通常在onServiceConnected方法中提供。

第一个问题AIDL真的只能在处理a时使用Service吗?如果是,为什么会这样?

现在,考虑我的场景。我想,就像任何其他优秀的开发人员一样,编写一个单一的、优雅的界面,允许Controller引导每个Slave,而不管它们的性质。到目前为止,我想到的唯一解决方案是使用Intents 和BroadcastReceivers,所有这些都方便地包装在专用的 Java 类中。

第二个问题:这是唯一可行的方法吗?我在监督什么吗?


编辑

我想我应该提供有关Controller …

java android ipc aidl

5
推荐指数
1
解决办法
1132
查看次数

Android相机:固定镜头焦点

我正在开发一个具有相机功能的Android应用程序.

首先,我在SO,XDA等上阅读了很多内容,然后请不要将我重定向到其他无用的帖子.

我试图实现类似"固定焦点模式"的东西,以便:

  1. 我用FOCUS_MODE_AUTO(或其他)开始我的应用程序;
  2. 将物体聚焦在任意距离;
  3. 修复当前焦点;
  4. 将相机移动到距离不同的另一个物体上.

我尝试了不同的解决方案,即:

  • mCamera.cancelAutoFocus()AutoFocusCallback防止焦点调整;
  • 设置a FocusArea:new Camera.Area(new Rect(-50, -50, 50, 50), 1000)将焦点固定在当前区域.

我的目标是API 20,我正在研究三星Galaxy S5.在此设备上,支持的对焦模式为: - 自动 - 无限 - 宏 - 连续 - 视频 - 连续图像

我发现更频繁的建议是重新编译Android ...

android autofocus android-camera

5
推荐指数
1
解决办法
7113
查看次数

如何将Google Play服务添加到AIDE项目?

我只在手机和平​​板电脑上使用AIDE开发,并希望添加Google Play服务.使用此SDK Manager应用程序(https://play.google.com/store/apps/details?id=com.rebellos.sdkmanager),我可以看到Google Play服务版.22.有什么办法可以看出这是最新的吗?另外,我如何处理我的AIDE项目以开始使用Google Play服务?即如何将它与项目等相关联.我的项目是一个GDX游戏项目,所以有gdx-game和gdx-game-android文件夹,虽然我对这一切对游戏的效果感到非常满意,但我不确定我在项目构建中获得下载的Google Play服务的方式/方式?

android aide-ide

5
推荐指数
1
解决办法
1031
查看次数

在棒棒糖上断开的 TextView fromHtml 链接

我们的应用程序有几个 TextViews 实例,其内容设置myTv.setText(Html.fromHtml());为适用于 Android 4.4.0 及更低版本。

从 4.4.2 和 Lollypop 开始,这些链接已停止工作。文本仍然带有下划线和超链接颜色,但点击它们不会产生任何结果。

不得不说,这些字段被标记为可复制粘贴的,众所周知,它与这些可生成对象有交互。

有没有人能够解决这个问题?

android spannablestring

5
推荐指数
1
解决办法
1302
查看次数