小编net*_*ein的帖子

Android:Proguard的推荐配置是什么?

我正在为Android开发应用程序并使用Proguard来混淆代码.

目前我正在使用ProGuard配置:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
Run Code Online (Sandbox Code Playgroud)

要维护布局XML上使用的自定义组件名称:

-keep public class custom.components.**
Run Code Online (Sandbox Code Playgroud)

要删除调试日志:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}
Run Code Online (Sandbox Code Playgroud)

为了避免更改布局onClick上调用的方法名称:

-keepclassmembers class * {
 public void onClickButton1(android.view.View);
 public void onClickButton2(android.view.View);
 public void onClickButton3(android.view.View);
}

-keepclasseswithmembernames class …
Run Code Online (Sandbox Code Playgroud)

android proguard

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

如何在不打开Play商店的情况下以编程方式安装应用程序(如Google Drive一样)

今天Google云端硬盘应用询问我是否要安装新的应用表单和文档.

我已经接受了,希望它可以打开Goog​​le Play商店,这样我就可以按安装了.

它没有.它只显示了弹出窗口,其中包含每个应用程序的权限以确认安装,这与您在Play商店中的任何应用程序上按"安装"时显示的相同.

我不知道可以做到这一点.

我们如何在应用程序中重现此行为:有一个"安装App XPTO"按钮,不需要打开Goog​​le Play商店?只显示权限对话框并继续通过Play商店安装它?


更新:

对于那些低调的人,因为他们认为这与其他问题是一样的......事实并非如此!

在这种情况下,Google Drive应用程序不会下载APK,然后安装.Google云端硬盘" 告诉 "Play商店下载和安装.

那是我感兴趣的API.

为了支持我的案例:在按下INSIDE Google Drive以安装应用程序而不打开Play商店后,下载开始.在下载过程中,我打开了Play商店进行检查,并且:

在此输入图像描述

屏幕截图证明,Google Drive不是下载APK并安装它.这是Play商店.

android

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

Android:在运行时更改形状颜色

我有一个drawable,我用作LinearLayout的背景.我想在运行时更改此Shape的颜色.我尝试过使用几种方法..但都没有用.

我遵循了这里描述的方法:http://www.anddev.org/android-2d-3d-graphics-opengl-problems-f55/change-shape-drawable-solid-color-t16798.html

但是有同样的问题......它不会崩溃..但颜色不会改变!

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00A6C1" />
    <corners android:radius="@dimen/square_corners" />
</shape>
Run Code Online (Sandbox Code Playgroud)

代码片段:

GradientDrawable drawable = (GradientDrawable) activity.getResources().getDrawable(R.drawable.blue_square_shape);


int color = ((Application) getApplication()).getColor();
drawable.setColor(color);

block.findViewById(R.id.blockSquare).setBackgroundDrawable(drawable);

findViewById(R.id.blockSquare).postInvalidate();
Run Code Online (Sandbox Code Playgroud)

任何线索?我已经过了一整天谷歌搜索...而且它变得很烦人......

更新:

当我尝试对此形状执行相同操作时:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/shape" android:shape="rectangle">
    <gradient android:startColor="#1FBCCF" android:endColor="#06A4C1"
        android:angle="270" />
    <corners android:topLeftRadius="@dimen/footer_corners"
        android:topRightRadius="@dimen/footer_corners" />
</shape>
Run Code Online (Sandbox Code Playgroud)

颜色变成黑色......我想它可以改变...

android drawable

51
推荐指数
5
解决办法
6万
查看次数

Android:AsyncTask建议:私有类还是公共类?

我目前正在团队中开发一些Android应用程序,我们在过去几个月中使用了两种不同的方法(一种是我个人喜欢的,另一种是另一种开发者喜欢的).

虽然到目前为止结果是一样的,但这让我感到疑惑...我们应该:

  • 使用AsyncTasks作为使用它们的Activities中的私有类.
  • 或使用AsyncTasks作为接收活动上下文的单独公共类

Google建议使用哪种方法?

您的经验对此有何看法(优点,缺点,问题)?

android android-asynctask

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

Kotlin:在Activity中使用BroadcastReceiver时未解析的本地类

编译项目时不时会出现此错误:

Error:java.lang.UnsupportedOperationException: Unresolved local class: com/myproject/activities/BaseActivity$broadcastReceiver$1
    at org.jetbrains.kotlin.descriptors.NotFoundClasses$classes$1.invoke(NotFoundClasses.kt:44)
    at org.jetbrains.kotlin.descriptors.NotFoundClasses$classes$1.invoke(NotFoundClasses.kt:32)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:408)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:483)
    at org.jetbrains.kotlin.descriptors.NotFoundClasses.getClass(NotFoundClasses.kt:101)
    at org.jetbrains.kotlin.serialization.deserialization.TypeDeserializer$typeConstructor$1.invoke(TypeDeserializer.kt:120)
    at org.jetbrains.kotlin.serialization.deserialization.TypeDeserializer.typeConstructor(TypeDeserializer.kt:124)
    at org.jetbrains.kotlin.serialization.deserialization.TypeDeserializer.simpleType(TypeDeserializer.kt:82)
    at org.jetbrains.kotlin.serialization.deserialization.TypeDeserializer.type(TypeDeserializer.kt:70)
    at org.jetbrains.kotlin.serialization.deserialization.TypeDeserializer.type$default(TypeDeserializer.kt:62)
    at org.jetbrains.kotlin.serialization.deserialization.MemberDeserializer.loadProperty(MemberDeserializer.kt:67)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.computeProperties(DeserializedMemberScope.kt:123)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.access$computeProperties(DeserializedMemberScope.kt:35)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$properties$1.invoke(DeserializedMemberScope.kt:61)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$properties$1.invoke(DeserializedMemberScope.kt:35)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:408)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:483)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.getContributedVariables(DeserializedMemberScope.kt:137)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedVariables(DeserializedClassDescriptor.kt:232)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.computeNonDeclaredProperties(DeserializedClassDescriptor.kt:252)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.computeProperties(DeserializedMemberScope.kt:124)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.access$computeProperties(DeserializedMemberScope.kt:35)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$properties$1.invoke(DeserializedMemberScope.kt:61)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope$properties$1.invoke(DeserializedMemberScope.kt:35)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:408)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:483)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.getContributedVariables(DeserializedMemberScope.kt:137)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedVariables(DeserializedClassDescriptor.kt:232)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.addFunctionsAndProperties(DeserializedMemberScope.kt:185)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberScope.computeDescriptors(DeserializedMemberScope.kt:153)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$allDescriptors$1.invoke(DeserializedClassDescriptor.kt:218)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$allDescriptors$1.invoke(DeserializedClassDescriptor.kt:211)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:323)
    at org.jetbrains.kotlin.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:370)
    at org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedDescriptors(DeserializedClassDescriptor.kt:223)
    at org.jetbrains.kotlin.resolve.scopes.ResolutionScope$DefaultImpls.getContributedDescriptors$default(ResolutionScope.kt:40) …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver kotlin

18
推荐指数
1
解决办法
1601
查看次数

Android:强制数据通过无线电与WiFi发送

是否有可能强制Android应用程序仅使用移动无线电连接(3g/4g /等),不允许使用WiFi?

我想我想使用HIPRI连接:(例如:打开WIFI,使用HIPRI 3G):http://groups.google.com/group/android-developers/browse_thread/thread/d41f85505484d29b

android radio packet wifi

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

当应用程序在AsyncTask执行期间进入后台时应该怎么做?

我有一个使用AsyncTasks来调用REST服务器的应用程序.

想象一下,在加载期间(这是AsyncTask进入REST服务器并将数据传送到下一个屏幕),用户按下Home.

建议:

  • 取消当前的AsyncTask,并在恢复活动时重新启动

要么

  • 继续AsyncTasks,但通过检查应用程序是否在后台来避免startActivity(以避免在将应用程序发送到后台后新活动的前景).并且onResume发送到下一个活动

您应该预见的最坏情况:

  1. 该应用程序进入后台,由于内存不足而被杀死
  2. 由于超时或其他REST错误,asynctask失败

两者之后,用户返回应用程序...

android android-asynctask

14
推荐指数
1
解决办法
3991
查看次数

多模块Android项目中的全局代码覆盖:合并代码覆盖率报告(单元和UI测试)

我有一个Android应用程序,它由2个模块组成:

  • 应用 - 用户界面

  • 子模块 - 具有大部分业务逻辑

对于他们每个人,我都有一个gradle任务来验证代码覆盖率:

  • 应用程序:UI代码覆盖率(Espresso)

  • 子模块:单元测试代码覆盖率

作为客户端的要求,我需要合并这两个报告以获得应用程序的整体/全局代码覆盖率.

注意:我正在使用Gradle 3.1.2版.


App Gradle文件:

apply plugin: 'jacoco'

android {

   testBuildType "uiTest"

    ...

  buildTypes {
    debug {
        applicationIdSuffix ".debug"
        versionNameSuffix "-debug"
        debuggable true

        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


        matchingFallbacks = ['debug']
    }

    // TESTS

    // unitTest will be used to run unit tests.
    unitTest.initWith(buildTypes.debug) //Beware the buildType this depends on MUST be above on the gradle file
    unitTest {
        applicationIdSuffix ".unitTest"
        versionNameSuffix "-unitTest" …
Run Code Online (Sandbox Code Playgroud)

android jacoco android-espresso

14
推荐指数
1
解决办法
1661
查看次数

Stackoverflow:由嵌套视图引起的?

我在刷新SlidingTray中的视图时遇到了崩溃(自定义的SlidingDrawer来自顶部).

我不确定是什么导致它..但我的第一个猜测是,这是由于嵌套布局的数量......

嵌套布局的最大数量是多少?

它是特定于设备的,我怎么能确定这是否是原因?

如果不是,那么这些东西都会导致它......是什么?

堆栈跟踪:

E/AndroidRuntime( 2199): FATAL EXCEPTION: main
E/AndroidRuntime( 2199): java.lang.StackOverflowError
E/AndroidRuntime( 2199): at android.graphics.Paint.measureText(Paint.java:1057)
E/AndroidRuntime( 2199): at android.text.Styled.drawDirectionalRun(Styled.java:267)
E/AndroidRuntime( 2199): at android.text.Styled.measureText(Styled.java:430)
E/AndroidRuntime( 2199): at android.text.Layout.measureText(Layout.java:1655)
E/AndroidRuntime( 2199): at android.text.Layout.getLineMax(Layout.java:689)
E/AndroidRuntime( 2199): at android.text.Layout.draw(Layout.java:340)
E/AndroidRuntime( 2199): at android.text.BoringLayout.draw(BoringLayout.java:365)
E/AndroidRuntime( 2199): at android.widget.TextView.onDraw(TextView.java:4168)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6880)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
E/AndroidRuntime( 2199): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
E/AndroidRuntime( 2199): at android.view.View.draw(View.java:6883)
E/AndroidRuntime( 2199): …
Run Code Online (Sandbox Code Playgroud)

stack-overflow layout android

11
推荐指数
1
解决办法
9241
查看次数

活动并排生命周期

想象一下,我有一个活动A,我从那个开始一个新的活动B.

什么是活动生命周期并排?

 1. A: onCreate 
 2. A: onStart 
 3. A: onResume
Run Code Online (Sandbox Code Playgroud)

在A => startActivity(B)

 4. B: onCreate
 5. B: onStart

 6. A: onPause

 7. B: onResume

 8. A: onStop
Run Code Online (Sandbox Code Playgroud)

它是否正确?

lifecycle android android-activity

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