标签: android

如何在没有Dagger的MVP中使用共享首选项并且不会导致Presenter依赖于上下文?

我正在尝试在没有Dagger的情况下实现MVP(用于学习目的).但我遇到了问题 - 我使用Repository模式从缓存(共享首选项)或网络获取原始数据:

Shared Prefs| 
            |<->Repository<->Model<->Presenter<->View
     Network|
Run Code Online (Sandbox Code Playgroud)

但要把手放在共享首选项上,我必须把它放在某个地方

presenter = new Presenter(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

我使用onRetainCustomNonConfigurationInstance/ getLastCustomNonConfigurationInstancepair来保持Presenter"保留".

public class MyActivity extends AppCompatActivity implements MvpView {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //...
        presenter = (MvpPresenter) getLastCustomNonConfigurationInstance();

        if(null == presenter){
            presenter = new Presenter(getApplicationContext());
        }

        presenter.attachView(this);
    }

    @Override
    public Object onRetainCustomNonConfigurationInstance() {
        return presenter;
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

那么如何在没有Dagger的MVP中使用共享首选项并且不会导致Presenter依赖于上下文?

mvp dependencies android dependency-injection sharedpreferences

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

如何使用JACK编译器执行缩小和混淆?

谷歌已经为Android开发者发布了针对Android Studio 2.1 的新JACK编译器测试版.

我的问题是,我们如何使用JACK为APK进行模糊处理?下面的文章说JACK 本地执行模糊处理并且不需要Proguard:

以下文章说JACK使用Proguard配置文件(即.pro文件)来执行混淆:

它也说

在此过程中,Jack还处理任何请求的代码缩小(缩小和/或混淆).

这到底是什么意思?我们是否必须使用该minifyEnabled选项并定义.pro包含Proguard选项的文件?

综上所述:

  • 我们究竟如何与JACK实现混淆?我们是否可以绕过Proguard的使用,或者Proguard在混淆过程中扮演事实上的角色,即使我们使用JACK编译?

  • JACK目前是否支持混淆,是否可以在Android Studio的稳定(即非beta/canary)版本中使用?

注意:

我已经提到了以下帖子:

进一步参考:

更新:

答案马特Insko是有益的,但我想更详细,更准确,规范的答案.

android android-sdk-tools android-studio android-jack-and-jill android-proguard

36
推荐指数
1
解决办法
4807
查看次数

Admob广告和Firebase广告之间的差异

我正在尝试从Google分析迁移到新的Firebase分析,但我注意到还有广告库.firebase广告是否也将取代admob广告?我应该继续通过谷歌播放服务使用admob吗?或者切换到Firebase SDK?反正有什么不同?

android admob firebase

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

控制台中的Android Firebase Analytics自定义事件报告

如果这是发布此问题的错误位置,请提前接受我的道歉,因为我不确定会是什么.

我想要实现的是即使使用Firebase分析记录自定义,Firebase分析也会在Firebase控制台中生成与其select_content事件示例类似的报告.触发如下:

    FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    Bundle bundle = new Bundle();
    bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "ID");
    bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, "NAME");
    bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
Run Code Online (Sandbox Code Playgroud)

更具体地说,后面的字符串FirebaseAnalytics.Param.CONTENT_TYPE可以是任何值,并将在控制台中生成一个报告,如下所示:

我创建自己的自定义事件:

Bundle params2 = new Bundle();
params2.putString(FirebaseAnalytics.Param.VALUE, "Google Play Games Sign out Button");
mFirebaseAnalytics.logEvent("Main_Activity_Button_Pressed", params2);
Run Code Online (Sandbox Code Playgroud)

为下面显示的此事件生成的报告似乎没有考虑我添加的值.

在此输入图像描述

是否有可能完成我想要做的事情,如果是这样,实现这个的正确方法是什么?

更新:似乎这不可能用于测试目的,因为我最近发现了这个:在此输入图像描述

这解释了为什么我的自定义参数没有出现在控制台中.

android firebase firebase-analytics

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

Kotlin Singleton应用类

所以在android中我想让我的应用程序类成为单例.

像这样:

object MyApplication: Application(){}
Run Code Online (Sandbox Code Playgroud)

不行.在运行时抛出以下错误:

java.lang.IllegalAccessException: private com....is not accessible from class android.app.Instrumentation.
Run Code Online (Sandbox Code Playgroud)

这样做也是不可能的:

class MyApp: Application() {

    private val instance_: MyApp

    init{
        instance_ = this
    }

    override fun onCreate() {
        super.onCreate()
        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree());
        }
    }

    companion object{
        fun getInstance() = instance_         
    }
}
Run Code Online (Sandbox Code Playgroud)

那么如何才能在我的应用程序中随处获得应用程序类的实例,MyApp.instance()而不是使用(applicationContext as MyApp).

还解释了为什么我想要这个:我在我的应用程序中有类,例如,使用上下文初始化的SharedPreference Singleton,并且作为它的单例,不能有参数.

singleton android kotlin

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

错误:android studio中的任务':app:transformClassesWithDexForDebug'执行失败

我正在将我的项目从eclipse转移到Android Studio.在运行我的应用程序时,我收到以下错误.无法找到任何解决方案.我也启用了multidex.

错误:任务':app:transformClassesWithDexForDebug'的执行失败.com.android.build.api.transform.TransformException:java.lang.RuntimeException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'命令'C:\ Program Files\Java\jdk1.7.0_79\bin\java.exe''以非零退出值1结束

我的gradle文件也在下面

apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
    applicationId "com.myapp"
    minSdkVersion 9
    targetSdkVersion 21
    multiDexEnabled true
}buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard- android.txt'), 'proguard-project.txt', 'proguard-google-api-client.txt'
     }
   }
 }
 dependencies {
 compile 'com.android.support:support-v4:23.4.0'
 compile 'com.google.android.gms:play-services:+'
 compile 'com.google.http-client:google-http-client-gson:1.20.0'
compile 'com.google.code.gson:gson:2.1'
compile 'com.android.support:appcompat-v7:23.4.0'
compile files('libs/activation.jar')
compile files('libs/additionnal.jar')
compile files('libs/android-support-v7-cardview.jar')
compile files('libs/android-support-v7-recyclerview.jar')
compile files('libs/commons-logging-1.1.1.jar')
compile 'com.google.api-client:google-api-client:1.18.0-rc'
compile 'com.google.api-client:google-api-client-android:1.18.0-rc'
compile 'com.google.api-client:google-api-client-appengine:1.18.0-rc'
compile 'com.google.http-client:google-http-client:1.18.0-rc'
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
compile 'com.google.http-client:google-http-client-appengine:1.18.0-rc'
compile 'com.google.oauth-client:google-oauth-client:1.18.0-rc'
compile 'com.google.oauth-client:google-oauth-client-appengine:1.18.0-rc'
compile files('libs/google-api-client-gson-1.18.0-rc.jar') …
Run Code Online (Sandbox Code Playgroud)

android runtimeexception android-studio

36
推荐指数
5
解决办法
10万
查看次数

蓝牙控制器和控制台之间的游戏命令格式

我正在创建一个Android项目,我必须将android wearable智能手表作为游戏控制器,它可以向连接到该智能手表的手持设备上运行的游戏发送命令BLE(Bluetooth Low Energy).

我在可穿戴设备上设计了控制器垫,可以在控制器键盘的软按钮上发送一些硬编码文本到手持设备应用程序.问题是,我必须用手持设备上运行的游戏所期望的游戏命令格式替换该文本.并且,在手持设备上运行的应用程序可以通过可穿戴服务来收听文本.我知道,第三方游戏不会运行任何可穿戴服务,因此第三方游戏将如何接受/收听可穿戴智能手表发送的命令.

第三方游戏可以通过Android SDK支持硬件控制器

android gamecontroller android-ble wear-os

36
推荐指数
1
解决办法
521
查看次数

主线程和UI线程之间的区别

我明白两者都是一样的.但我最近(派对有点晚)遇到了android支持注释.同一个注释中的注释

但是,在具有不同线程上的多个视图的系统应用程序的情况下,UI线程可能与主线程不同

我无法理解这里的情景.有人可以解释一下吗?

编辑:我已经阅读了开发人员文档,这与此问题中链接的支持文档相矛盾.请停止发布两者是一样的.

multithreading android

36
推荐指数
1
解决办法
7366
查看次数

如何在我的Windows桌面上运行localhost的移动设备上运行我的Angular站点

我知道从这个问题和在桌面上的localhost上运行的 超级用户站点上的答案在Android设备上无法访问(PS:这个问题在链接中的问题上继续)该命令ng serve打开一个错误配置的Web服务器.

问题是如何在不部署我的网站的情况下在Android设备上运行我的网站.我将尝试http://192.168.0.168:4200使用Angular-CLI 在此URL上运行该站点.

networking webserver android localhost angular-cli

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

ContentLoadingProgressBar的实际用法

我正在浏览android的开发者网站,我发现了一个名为ContentLoadingProgressBar的类.看到这堂课,我脑子里想出了一些问题.如果有人回答我的问题会很棒.

  1. Normal ProgressBarContentLoadingProgressbar?有什么区别?
  2. ContentLoadingProgressBar的实际用法是什么?
  3. 我们可以根据我们的要求显示/隐藏此进度条吗?

  4. 我如何自定义这个progressBar的样式?

感谢您在Advance中提供的帮助.如果有人使用代码和示例解释它会很棒.谢谢.

android android-progressbar

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