小编shk*_*der的帖子

使用ProGuard混淆私有字段

我在AndroidStudio 1.2.1.1中使用ProGuard和Gradle 1.2.3.

My Gradle的发布版本配置如下:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
Run Code Online (Sandbox Code Playgroud)

我希望类的私有字段被混淆.

这是我的proguard配置文件(经过多次尝试)截至目前:

-allowaccessmodification
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
-verbose
[...]
Run Code Online (Sandbox Code Playgroud)

但是在使用androddAndroidGuard 反编译后,我最终得到:

private com.google.android.gms.common.api.GoogleApiClient googleApiClient;
Run Code Online (Sandbox Code Playgroud)

我知道这种混淆的使用是有限的,但我想googleApiClient由ProGuard重命名.怎么办?

这是refcard.

有没有办法做相反的事情-keepclassmembernames

java obfuscation android proguard android-proguard

15
推荐指数
1
解决办法
2946
查看次数

ActivityTestRule - 如何在Application的onCreate之前调用代码

我正在使用带有ActivityTestRule的Espresso 2.1,我正在寻找一种方法来设置一些静态标志,然后onCreate()才会调用我的应用程序.

我有一些我不希望在仪器测试期间调用的初始化代码.

android integration-testing unit-testing android-espresso

13
推荐指数
1
解决办法
4300
查看次数

杰克逊 - 递归解析为Map <String,Object>

我正在尝试简化我的代码:我想存储键和值(所有字符串).

我实际上是用它Map<String, Object>来存储它.hat方式Object可以是value(String)或新节点(Map<String, Object>).

我怎么能简化这段代码?递归函数会很好.

try {
    JsonParser jsonParser = new JsonFactory().createJsonParser(content);

    jsonParser.nextToken();
    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
        jsonParser.nextToken();

        if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
                String key = jsonParser.getCurrentName();
                jsonParser.nextToken();

                if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
                    mData.put(key, new HashMap<String, Object>());
                    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
                        String subkey = jsonParser.getCurrentName();
                        jsonParser.nextToken();

                        if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
                            Map<String, Object> subdata = (Map<String, Object>) mData.get(key);
                            subdata.put(subkey, new HashMap<String, Object>());
                            while (jsonParser.nextToken() != …
Run Code Online (Sandbox Code Playgroud)

java parsing json jackson

12
推荐指数
1
解决办法
1万
查看次数

圆形角落按钮与背景颜色在android中

我需要在android中使用背景颜色变化做圆形角落按钮.

我怎么能这样做?

示例链接/代码非常感谢.

android android-xml

10
推荐指数
2
解决办法
3万
查看次数

在Gradle构建文件中放置apply Crashlytics插件指令的位置

最近我将我的android项目从Eclipse迁移到了Android Studio.目前我的项目具有以下Gradle脚本结构:

  • 顶级gradle构建文件
  • 主模块(我的应用程序)gradle构建文件
  • 模块A(我的应用程序)gradle构建文件
  • 模块B(我的应用程序)gradle构建文件
  • 模块C(我的应用程序)gradle构建文件

我的主gradle构建文件的内容:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.1'
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        mavenCentral()
    }
}
Run Code Online (Sandbox Code Playgroud)

我想确保整个项目都有崩解剂.我最初尝试添加

apply plugin: 'crashlytics'
Run Code Online (Sandbox Code Playgroud)

到主项目gradle文件,但我遇到以下错误:

错误:(2,0)Crashlytics应用于没有Android插件的项目.请确保在适合您项目的Android插件之后应用Crashlytics插件.

然后我移动apply plugin: …

plugins android gradle crashlytics

10
推荐指数
0
解决办法
4400
查看次数

ps:干净的方式只获得父进程?

我使用ps efps rf不少.

以下是一个示例输出ps rf:

  PID TTY      STAT   TIME COMMAND
 3476 pts/0    S      0:00 su ...
 3477 pts/0    S      0:02  \_ bash
 8062 pts/0    T      1:16      \_ emacs -nw ...
15733 pts/0    R+     0:00      \_ ps xf
15237 ?        S      0:00 uwsgi ...
15293 ?        S      0:00  \_ uwsgi ...
15294 ?        S      0:00  \_ uwsgi ...
Run Code Online (Sandbox Code Playgroud)

而今天我只需要在脚本中检索uwsgi 的主进程(所以我只需要15237但不需要15293也不需要15294).

截至今天,我尝试了一些ps rf | grep -v ' \\_ '......但我想要一个更清洁的方式.

我也来自unix.com论坛的另一个解决方案: …

linux bash shell command-line ps

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

"太多属性引用"警告

我有一个应用程序,其中一些片段只包含ListViews.我的一些低端设备用户会遇到一种现象,即片段根本无法显示数据.当他们进入片段时,我会显示一个ProgressBar,而这个ProgressBar似乎永远旋转.

所以我买了一台低端设备,面临同样的问题.我通过网络请求获取ListView的数据到我的后端API,但答案永远不会返回.我到目前为止唯一的警告是

W/ResourceType? Too many attribute references, stopped at: 0x01010034
Run Code Online (Sandbox Code Playgroud)

我在网上找不到这个错误,但似乎这个警告记录在这里https://github.com/SciAps/android-frameworks-base/blob/c693209edc3696884c1fcd59790dda0b9811d017/libs/utils/ResourceTypes.cpp#L1573 ,但我不明白Android代码在那里做什么.

任何人都知道这里发生了什么,问题是什么以及我如何解决这个问题?

顺便说一句,我使用RoboSpice和Retrofit来做网络请求.在此警告之后停止负责获取数据的后台服务,这就是我永远不会收回数据的原因.

编辑据我所知,没有看到数据与警告无关.无论如何,这个警告意味着什么,我该如何预防呢?

android android-layout android-framework

8
推荐指数
2
解决办法
4221
查看次数

Git - 无法删除远程分支

我做了一个无意中命名为"0.2"的git分支,它也是一个标签.

所以我试图从原点删除它:

$ git branch -rD origin/0.2
Deleted remote branch origin/0.2
Run Code Online (Sandbox Code Playgroud)

但是之后:

$ git fetch origin
 * [new branch]      0.2        -> origin/0.2
Run Code Online (Sandbox Code Playgroud)

这是我推动时的错误:

$ git push --force origin :0.2
error: dst refspec 0.2 matches more than one.
Run Code Online (Sandbox Code Playgroud)

所以我删除了远程标签:

$ git tag -d 0.2
$ git push origin :refs/tags/0.2
Run Code Online (Sandbox Code Playgroud)

仍然没有去:

$ git branch -rD origin/0.2
 * [new branch]      0.2        -> origin/0.2
Run Code Online (Sandbox Code Playgroud)
  1. 这是一个git bug吗?
  2. 除了标签和分支名称等于我之外,我做错了吗?
  3. 如何删除这个远程分支?

git git-remote git-tag git-branch

7
推荐指数
1
解决办法
5675
查看次数

Android相机错误5001

我在Android应用上加载Camera对象时出现了Camera"Error 5001"错误.

E/Camera: Error 5001
Run Code Online (Sandbox Code Playgroud)

我甚至无法使用"主页"按钮退出应用程序,它会冻结90秒.我找不到有关该错误的任何文档.

5001是什么意思?

90秒后,logcat记录:

W/CameraBase: Camera service died!
Run Code Online (Sandbox Code Playgroud)

现在我无法正常运行应用程序.屏幕为绿色,无法加载相机.

重新启动修复了相机问题,但我想知道:

  • 究竟发生了什么
  • 如何避免它

该设备是一款带有Android 4.4.2的Moto X.

感谢您提供任何信息.

编辑

public final class BarcodePreview extends SurfaceView implements SurfaceHolder.Callback {

    private Activity mActivity;
    private SurfaceHolder mSurfaceHolder;
    private Camera mCamera;
    private PreviewCallback mPreviewCallback;
    private AutoFocusCallback mAutoFocusCallback;

    public BarcodePreview(final Activity activity, final Camera camera, final PreviewCallback previewCallback, final AutoFocusCallback autoFocusCallback) throws Exception {
        super(activity);

        mActivity = activity;
        mCamera = camera;
        mPreviewCallback = previewCallback;
        mAutoFocusCallback = autoFocusCallback;

        mSurfaceHolder = getHolder();
        if (mSurfaceHolder == …
Run Code Online (Sandbox Code Playgroud)

android android-camera

7
推荐指数
1
解决办法
1464
查看次数

片段与DrawerLayout/NavigationView重叠

使用DrawerLayout具有NavigationViewFrameLayout我想改用Fragment秒.这很好用.但是,如果我切换太快,那么Fragments重叠......

这就像executePendingTransactions()不起作用.

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/toolbar" />

        <FrameLayout
            android:id="@+id/frameLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="@240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/transparent"
        android:dividerHeight="0dp"
        app:menu="@menu/navigationdrawer" />

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

如果我Fragment快速切换s(太快)(手动或通过我的Nexus 5延迟750ms的代码),我得到两个Fragments重叠,第二个Fragment启用触摸但是第一个Fragment在顶部...

第一个Fragment包含an ImageViewTextViews.第二个Fragment包含a TabLayout和a ViewPager(如果我的问题可以解决这个问题).是的我正在使用AppCompat 22.2.0和Design 22.2.0库.

如果我为两者设置背景颜色,那么我只能看到第一个颜色Fragment,它永远不会改变.

我试过popBackStackImmediate(),executePendingTransactions(),remove(fragment), …

android android-fragments fragmentmanager android-design-library

7
推荐指数
1
解决办法
1382
查看次数