小编Jam*_*mes的帖子

崩溃将AndroidKeyStoreRSAPrivateKey转换为RSAPrivateKey

我正在学习本教程:如何使用Android Keystore存储密码和其他敏感信息.它(松散地)与Google Sample应用程序绑定:BasicAndroidKeyStore.

我可以使用公钥加密我的数据,我可以在运行Lollipop的设备上解密.但是我有一个运行棉花糖的Nexus 6,这个崩溃给出了错误:

java.lang.RuntimeException: Unable to create application com.android.test: java.lang.ClassCastException: android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey
Run Code Online (Sandbox Code Playgroud)

这是它崩溃的代码:

KeyStore.Entry entry;

//Get Android KeyStore
ks = KeyStore.getInstance(KeystoreHelper.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);

// Weird artifact of Java API.  If you don't have an InputStream to load, you still need to call "load", or it'll crash.
ks.load(null);

// Load the key pair from the Android Key Store
entry = ks.getEntry(mAlias, null);

KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) entry;

//ERROR OCCURS HERE::
RSAPrivateKey …
Run Code Online (Sandbox Code Playgroud)

java android cryptography java-security android-6.0-marshmallow

41
推荐指数
3
解决办法
9910
查看次数

如何更新或向TeamCity代理添加环境变量

TeamCity代理显示代理参数下的"环境变量"列表,但我无法让它们更新.我已将环境变量添加到我的代理操作系统,但无法让它们刷新.我尝试重新启动代理并禁用并重新启用代理.

teamcity

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

如何android单元测试和模拟静态方法

嗨,我真的希望你能帮助我,我觉得我已经把头发拉了好几天了.

我正在尝试为方法A编写单元测试.方法A调用静态方法B.我想模拟静态方法B.

我知道之前已经问过这个问题,但我觉得Android从那时起已经成熟,必须有办法完成这么简单的任务,而无需重新编写我想测试的方法.

这是一个例子,首先是我要测试的方法:

public String getUserName(Context context, HelperUtils helper) {
    if(helper == null){
        helper = new HelperUtils();
    }
    int currentUserId = helper.fetchUsernameFromInternet(context);

    if (currentUserId == 1) {
        return "Bob";
    } else {
        return "Unknown";
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来我要模拟的静态方法:

public class HelperUtils {
    public static int fetchUsernameFromInternet(Context context) {
        int userid = 0;

        Log.i("HelperUtils ", "hello");

        return userid;
    }
}
Run Code Online (Sandbox Code Playgroud)

在其他语言中,这很容易,但我无法在Android中使用它.我尝试了Mockito,但似乎不支持静态方法

HelperUtils helper = Mockito.mock(HelperUtils.class);
Mockito.when(helper.fetchUsernameFromInternet(getContext())).thenReturn(1);
Run Code Online (Sandbox Code Playgroud)

这个错误

org.mockito.exceptions.misusing.MissingMethodInvocationException

我已经尝试过Powermock,但我不完全确定这是Android支持的.我设法在我的gradle文件中使用androidCompile运行powermock但是我收到此错误:

错误:任务':app:dexDebugAndroidTest'的执行失败.com.android.ide.common.process.ProcessException:

更不用说PowerMockito.mockStatic(HelperUtils.class);不返回任何内容,所以我不知道将什么传递给我的getUsername方法!

任何帮助都会非常感激.

java android unit-testing mockito powermock

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

Firebase 远程配置 getInt() 丢失

Firebase 提供以下方法:

  • 获取布尔值()
  • getByteArray()
  • getDouble()
  • getLong()
  • 获取字符串()

https://firebase.google.com/docs/remote-config/use-config-android#get-parametervalues-to-use-in-your-app

但是此列表中缺少 getInt(),我很好奇是否有原因?使用 Long 或 String 并强制转换/转换为 int 的首选方法是什么?

firebase firebase-remote-config

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

结合Firebase和Realm的崩溃 - 失败的解决方案:Lio/reactivex/Observable;

我正在尝试从Firebase下载对象并将它们存储在Realm中.结合这两个优秀的库,我收到了崩溃.

我创建了一个非常简单的演示应用程序来说明我的问题.在创建扩展RealmObject的对象时,Firebase似乎感到不安.

我可以通过删除RealmObject扩展来完成这项工作,但后来我必须维护两个相同的对象.随着时间的推移,这变得复杂和令人沮丧,这远非理想.

火力地堡:

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("players");

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "onDataChange: " + dataSnapshot.getChildrenCount());

            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                //***CRASH here*****
                Player player = snapshot.getValue(Player.class);
                Log.d(TAG, "onDataChange: " + player.getFirstname());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e(TAG, "onCancelled: ", databaseError.toException());
        }
    });
Run Code Online (Sandbox Code Playgroud)

玩家:

public class Player extends RealmObject{
private int age;
private String firstname;

public Player() {
}

//getters and setters
}
Run Code Online (Sandbox Code Playgroud)

Gradle:

compile …
Run Code Online (Sandbox Code Playgroud)

android realm firebase firebase-realtime-database

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

Twitter SDK requestCode

我正在使用Twitter实现登录:https: //dev.twitter.com/twitter-kit/android/twitter-login

哪个onActivityResult用于回调.这很好,但是onActivityResult多用途,通常区分使用requestCode.

但是我无法在SDK中的任何地方找到如何区分这个Twitter requestCode.大多数库提供枚举或最终静态数字或其他东西!

有谁知道在Twitter SDK中我可以找到对此的引用requestCode?我真的很感激任何帮助.

谢谢

twitter android twitter-fabric

6
推荐指数
1
解决办法
1075
查看次数

将调试和发布发布到artifactory

我正在使用Android Studio并拼命试图通过单独的repoKeys将我的调试和发布版本发布到神器.最好是两个独立的任务.我已经阅读了这篇优秀的指南,但我不希望每次都要更改我的gradle文件才能进行部署.

我可以轻松地创建两个pom文件,但还没有设法使artifactory插件动态到足以切换我的两个rep键.

我觉得这是我最接近的,但它并不完全存在:

String art_repo = ''

artifactory {
    contextUrl = 'https://www.myjfrogrepo.com'

    publish {
        repository {
            // The Artifactory repository key to publish to
            repoKey = "${art_repo}"
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个自定义任务来设置art_repo变量.

task debugPublishTojFrog {
    group "Publishing"
    art_repo = 'libs-snapshot-local'
    art_publicationName = 'debugAar'

    doLast {
        println "Successfully published ${art_repo} to jFrog"
    }
}
debugPublishTojFrog.finalizedBy artifactoryPublish
Run Code Online (Sandbox Code Playgroud)

这会响应错误

Target repository cannot be empty
Run Code Online (Sandbox Code Playgroud)

这使我认为repoKey是在构建时而不是在运行时设置的,因为我的自定义任务的更改似乎被忽略了.

任何建议真的非常感激.

android artifactory android-gradle-plugin

6
推荐指数
1
解决办法
483
查看次数

授权失败:错误域=AKAuthenticationError Code=-7026 "(null)" UserInfo={AKClientBundleID=my bundle id}

Authorization failed: Error Domain=AKAuthenticationError Code=-7026 "(null)" UserInfo={AKClientBundleID=my bundile id}

我有同样的问题。我在开发人员控制台和 Xcode 中都启用了 Apple 功能登录,但错误仍然存​​在。

ios firebase flutter apple-sign-in

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

Pixel 手机上的 checkLocationSettings 返回 RESOLUTION_REQUIRED

我有三部 Pixel 手机,在检查片段中的位置权限时,它们都显示此行为。

当 wifi 关闭时,checkLocationSettings 方法中的 result.isSuccessful() 始终返回 false。我真的不明白,就好像 Pixel 不知道如何处理没有 wifi 的位置请求。

请注意,如果您打开扫描 WiFi 网络,它将再次开始正常工作。

这是我的申请流程:

1) Activity 请求位置权限并被授予。(这一切都很好)。

2) 稍后运行的片段会检查授予的位置权限并请求位置更新。

片段代码:

locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(UPDATE_INTERVAL);
locationRequest.setFastestInterval(FASTEST_INTERVAL);

LocationSettingsRequest.Builder builder = new 
LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
SettingsClient client = LocationServices.getSettingsClient(activity);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

task.addOnCompleteListener(result -> {
       if (result.isSuccessful()) {
           fusedLocationClient.requestLocationUpdates(
           ...
       }else{
           //Always end up here
           //com.google.android.gms.common.api.ResolvableApiException: 6: RESOLUTION_REQUIRED
           Exception locExcep = result.getException();
           Log.e(TAG, "startLocationUpdates failed: ", locExcep);
       }
Run Code Online (Sandbox Code Playgroud)

适用于我能拿到的所有其他手机。所有代码几乎与以下相同:

https://developer.android.com/training/location/change-location-settings.html

https://developer.android.com/training/location/receive-location-updates

错误是:

com.google.android.gms.common.api.ResolvableApiException: 6: RESOLUTION_REQUIRED
        at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source:3)
        at …
Run Code Online (Sandbox Code Playgroud)

android google-play-services

5
推荐指数
0
解决办法
822
查看次数