标题非常明显.我理解这个开发人员选项的作用.
我不明白的是以下几点:
我很想知道这个选项背后的原因.
自Firebase崩溃报告发布以来,最突出的问题之一就是从Crashlytics转移到了没有.
比较两种崩溃报告服务有什么优缺点?
android firebase crashlytics crashlytics-android firebase-crash-reporting
我正在将一个项目从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)
它也有效,而且与课程无关.
题
我想知道:
回答
@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
我正在研究的系统架构需要比较两个 SSL/TLS(通常是 X.509)证书。也就是说,我需要验证两个证书是否相同。
我不在乎它们是否已过期或自签名,我只想确保它们没有以任何方式被更改。
执行此类操作的最正确方法是什么?比较这些证书的两个签名(两个字节[])就足够了,或者这个操作是否容易受到我目前尚未考虑的漏洞利用?
我正在尝试配置应用程序的构建变体,作为从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'风格的版本代码.使用PackageManager
或BuildConfig
读取这些值没有区别.这是我使用的代码:
// 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) 场景:我有一个Controller
(普通的 Java 类)必须能够引导多个Slave
s。
ASlave
的性质可以不同,因此它可以是:
Service
,我们称之为 a ServiceSlave
:这个对象的生命周期通常不同于应用程序的组件(比如,它不依赖于当前的活动)ObjectSlave
:这个对象的生命周期在某种程度上绑定到它被创建的范围(比如,当前活动)这两种类型的Slave
共同点是它们可以驻留在不同的进程中。
由于这最后一个“要求”,我立即将注意力转向AIDL
/Messenger
作为 aController
和 a之间的通信形式Slave
,因为它提供了 IPC。
然而,似乎AIDL
(反过来Messenger
,因为它也应该基于 AIDL)只有在您使用Service
. 也就是说,我没有办法在AIDL
没有IBinder
对象的情况下实现基于 -based 的接口,通常在onServiceConnected
方法中提供。
第一个问题:AIDL
真的只能在处理a时使用Service
吗?如果是,为什么会这样?
现在,考虑我的场景。我想,就像任何其他优秀的开发人员一样,编写一个单一的、优雅的界面,允许Controller
引导每个Slave
,而不管它们的性质。到目前为止,我想到的唯一解决方案是使用Intent
s 和BroadcastReceiver
s,所有这些都方便地包装在专用的 Java 类中。
第二个问题:这是唯一可行的方法吗?我在监督什么吗?
编辑
我想我应该提供有关Controller …
我正在开发一个具有相机功能的Android应用程序.
首先,我在SO,XDA等上阅读了很多内容,然后请不要将我重定向到其他无用的帖子.
我试图实现类似"固定焦点模式"的东西,以便:
FOCUS_MODE_AUTO
(或其他)开始我的应用程序;我尝试了不同的解决方案,即:
mCamera.cancelAutoFocus()
在AutoFocusCallback
防止焦点调整;FocusArea
:new Camera.Area(new Rect(-50, -50, 50, 50), 1000)
将焦点固定在当前区域.我的目标是API 20,我正在研究三星Galaxy S5.在此设备上,支持的对焦模式为: - 自动 - 无限 - 宏 - 连续 - 视频 - 连续图像
我发现更频繁的建议是重新编译Android ...
我只在手机和平板电脑上使用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服务的方式/方式?
我们的应用程序有几个 TextViews 实例,其内容设置myTv.setText(Html.fromHtml());
为适用于 Android 4.4.0 及更低版本。
从 4.4.2 和 Lollypop 开始,这些链接已停止工作。文本仍然带有下划线和超链接颜色,但点击它们不会产生任何结果。
不得不说,这些字段被标记为可复制粘贴的,众所周知,它与这些可生成对象有交互。
有没有人能够解决这个问题?