自动生成的 proguard-rules.pro 具有以下内容:
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
Run Code Online (Sandbox Code Playgroud)
多年来,我一直对此进行评论,直到 Android Studio 3.4默认使用R8而不是 ProGuard ,它才能完美运行。
让我们使用以下示例:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
at net.foo.anroid.Foo.wb.d(SourceFile:453)
at net.foo.anroid.Foo.wb.a(SourceFile:213)
at net.foo.anroid.Foo.wb.n(SourceFile:103)
at net.foo.anroid.Foo.qa.run(Unknown Source:2)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
当使用 ProGuard 时,行号(例如 453、213...)曾经是 Java 代码源文件中的实际行号,但它们不再是 R8。即使使用官方推荐的反混淆工具ReTrace也无法恢复原始行号。
“-keepattributes SourceFile,LineNumberTable”究竟是做什么的?
我知道使用///来评论函数是正确的方法,它也适用于属性,如下面的代码所示
/// <summary>
/// This is for demo
/// </summary>
public class Foo
{
/// <summary>
/// Description A (working for intellisense)
/// </summary>
public int iA { get; set; }
/// Description B (not working for intellisense)
public int iB { get; set; }
public int iC { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更简单的方法来注释intellisense的类属性而不是最小3行的///.
这就是每天发生的事情大约六次:
Android模拟器(例如CPU/API:Intel Atom(x86),目标:API级别15)可以正常运行一段时间,然后Eclipse在安装应用程序时显示以下错误
[2013-07-01 15:15:47 - Myapp] Failed to install myapp.apk on device 'emulator-5554': Connection refused: connect
[2013-07-01 15:15:47 - Myapp] java.net.ConnectException: Connection refused: connect
[2013-07-01 15:15:47 - Myapp] Launch canceled!
Run Code Online (Sandbox Code Playgroud)
有时关闭并重新启动模拟器将解决此问题.但是,大多数情况下,启动模拟器会生成以下内容:
[2013-07-01 15:16:43 - Emulator] HAX is working and emulator runs in fast virt mode
[2013-07-01 15:16:43 - Emulator] emulator: warning: opening audio input failed
Run Code Online (Sandbox Code Playgroud)
发生这种情况时,模拟器将显示,但它将无法工作(即无法安装应用程序).重置adb(DDMS>设备>重置adb)将不起作用.我必须去Windows任务管理器杀死adb.exe.Adb.exe将在不到20秒的时间内自动重启,一切都会好的.
我每天多次这样做有点不舒服,所以我正在寻找一种避免adb腐败的方法.
计算机操作系统:Windows 8 Pro
CPU:Intel i5
Eclipse:构建ID:20121004-1855
在2013-07-26添加: 我选择IronBlossom的回答作为答案,即使它没有具体回答这个问题,但它解决了必须经常重启ADB的问题.实际上,它解决了多个问题,包括一个非常重要的问题 - 无法在快速模式下同时运行英特尔的Android模拟器和Windows模拟器.有一个技巧可以并排运行Genymotion仿真器和Windows Phone仿真器.
queueInputBuffer(int index,int offset,int size,long presentationTimeUs,int flags)中 presentationTime的官方定义 如下:
此缓冲区的显示时间戳(以微秒为单位).这通常是应该呈现(呈现)此缓冲区的媒体时间.
为什么解码器需要这个,如果它是应用程序何时呈现解码图像?我已经为presentationTimeUs尝试了一些任意数字,它们似乎对解码没有任何影响.例如,如果我将presentationTimeUs的原始值加倍,则视频的解码方式与原始视频的解码速度完全相同.
谁能对此有所了解?
构建应用程序会生成以下错误:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v7/appcompat/R$anim.class
Run Code Online (Sandbox Code Playgroud)
我多次清理和建造项目无济于事.它的gradle构建中包含以下内容:
compile 'com.android.support:appcompat-v7:23.3.0'
Run Code Online (Sandbox Code Playgroud)
它还通过其aar文件使用库.该库项目在其gradle构建中也具有上述内容.
有人可以提供如何解决这个问题的提示吗?
android android-build android-library android-support-library android-gradle-plugin
对于Android,以下代码返回一个Uri,可用于创建与目录对应的DocumentFile。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_CUSTOM_FOLDER);
Run Code Online (Sandbox Code Playgroud)
由于库的许多方法都需要一个参数为 java.io.File,我想知道是否可以从 DocumentFile 中获取 java.io.File。
例如,返回的文档树 Uri treeUri 如下:
treeUri.getPath():/tree/primary:DCIM/deeper/evendeeper
treeUri.toString(): content://com.android.externalstorage.documents/tree/primary%3ADCIM%2Fdeeper%2Fevendeeper
Run Code Online (Sandbox Code Playgroud)
使用以下堆栈跟踪,应用程序会发生很多崩溃
java.lang.RuntimeException:
at android.app.LoadedApk.makeApplication(LoadedApk.java:563)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4530)
at android.app.ActivityThread.access$1500(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5258)
at java.lang.reflect.Method.invoke(Native Method:0)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:940)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:735)
Caused by: java.lang.IllegalStateException:
at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:409)
at android.app.LoadedApk.makeApplication(LoadedApk.java:555)
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪没有任何应用程序代码的跟踪.考虑到庞大的用户群,它相对较少(每天每10K有效设备大约1个).我无法从上述信息中找出任何线索.任何人都可以对此有所了解,以帮助防止这次崩溃?
编辑(2017-06-14):Google Play控制台的以下屏幕截图显示前6个崩溃群集的堆栈跟踪中没有应用代码:
android.view.WindowManagerGlobal.findViewLocked中的java.lang.IllegalArgumentException
android.view.WindowManagerGlobal.findViewLocked中的java.lang.IllegalArgumentException
android.view.WindowManagerGlobal.findViewLocked中的java.lang.IllegalArgumentException
在tgkill
在tgkill
android.app.LoadedApk.initializeJavaContextClassLoader中的java.lang.IllegalStateException
我想知道应用程序是否可以采取任何措施来避免以下Android ANR(通过Goolge Play Console):
“主”(tid = 1)线程处于挂起状态。这可能是由于垃圾收集造成的。
"main" tid=1 Suspended Thread suspended
"main" prio=5 tid=1 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x41ca59a0 self=0x41a46010
| sysTid=11845 nice=0 sched=0/0 cgrp=apps handle=1074713820
| state=S schedstat=( 0 0 0 ) utm=64 stm=22 core=1
at android.widget.LinearLayout.measureHorizontal (LinearLayout.java)
at android.widget.LinearLayout.onMeasure (LinearLayout.java:590)
at android.view.View.measure (View.java:15520)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:4825)
at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical (LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure (LinearLayout.java:588)
at android.view.View.measure (View.java:15520)
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:4825)
at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1404)
at android.widget.LinearLayout.measureHorizontal (LinearLayout.java:1052)
at android.widget.LinearLayout.onMeasure (LinearLayout.java:590)
at android.view.View.measure (View.java:15520)
at android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:681) …
Run Code Online (Sandbox Code Playgroud) 我知道 Android 10 也有类似的问题。我在 Android 11 上偶尔看到中止崩溃。这些崩溃的回溯并非 100% 相同,但非常相似。有人能解释一下可能的原因吗?
例如,以下是两个回溯:
从三星设备:
backtrace:
#00 pc 000000000004f064 /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
#00 pc 000000000053b008 /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+2340)
#00 pc 000000000001394c /system/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*)+76)
#00 pc 0000000000006d10 /system/lib64/liblog.so (__android_log_assert+336)
#00 pc 0000000000041b24 /system/lib64/libmedia_jni.so (android::JMediaCodec::configure(android::sp<android::AMessage> const&, android::sp<android::IGraphicBufferProducer> const&, android::sp<android::ICrypto> const&, android::sp<android::hardware::cas::native::V1_0::IDescrambler> const&, int)+488)
#00 pc 0000000000045668 /system/lib64/libmedia_jni.so (android_media_MediaCodec_native_configure(_JNIEnv*, _jobject*, _jobjectArray*, _jobjectArray*, _jobject*, _jobject*, _jobject*, int)+588)
#00 pc 0000000000253200 /system/framework/arm64/boot-framework.oat (art_jni_trampoline+272)
#00 pc 000000000067a3d0 /system/framework/arm64/boot-framework.oat (android.media.MediaCodec.configure+1472)
#00 pc 000000000067b034 /system/framework/arm64/boot-framework.oat (android.media.MediaCodec.configure+68)
#00 pc …
Run Code Online (Sandbox Code Playgroud) 我曾经能够将库 aar 文件作为模块导入,并且它们一直运行良好。我不知道如何使用最新版本的 Android Studio Arctic Fox 来做到这一点。有人可以提供一些建议吗?
我可以按照官方说明通过在 build.gradle 中添加以下内容来添加 aar 作为依赖项:
implementation files('libs/myLibrary-release.aar')
Run Code Online (Sandbox Code Playgroud)
不幸的是,这将需要依赖应用程序(即在其 build.gradle 中使用上述行来使用库的应用程序)了解 myLibrary 使用哪些外部库并添加所有依赖项。例如,如果 myLibrary 有 30 个依赖项,例如“implementation 'joda-time:joda-time:2.10.5'”,则每个依赖应用程序都必须具有这 30 个依赖项。如果 myLibrary 更新了新的依赖项,则所有依赖应用程序也需要添加它。最糟糕的是,应用程序可以在没有这些依赖项的情况下正常构建和启动,但在需要缺少依赖项时会在运行时崩溃。