小编Nie*_*orp的帖子

Android密钥库已损坏

在播放商店中没有更新我的应用程序一段时间后,我尝试使用我的密钥库签署我的一个APK,但却发现密钥库和别名密码不再起作用.我可以使用这个要点重置密钥库密码:gist.github.com/zach-klippenstein/4631307现在工作正常.这适用于两个不同应用程序的两个不同的密钥库.

跑步keytool -list -keystore mykeystore导致:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

myalias, Dec 23, 2014, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 85:8F:69......
Run Code Online (Sandbox Code Playgroud)

我100%确定别名密码与密钥库密码相同,但它似乎不起作用.我已尝试在Android Studio中签署APK,jarsigner -keystore mykeystore -storepass mykeystorepassword app-debug.apk myalias但响应总是:jarsigner: unable to recover key from keystore.

我尝试将别名移动到新的密钥库文件,keytool -importkeystore -srckeystore mykeystore -destkeystore newkeystore -srcalias myalias然后要求我输入新密钥库的新密码和旧密钥库的密码(两者都有效),只有在输入别名密码后才会出现异常:

Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
Enter key password for <myalias>
keytool error: java.security.UnrecoverableKeyException: Cannot recover key
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索后,我发现对于某些人来说,密钥库在更新到另一个JDK版本或Android …

java android keytool jarsigner

24
推荐指数
1
解决办法
3816
查看次数

复杂的Java对象到CSV

我正在尝试从相当复杂的Java对象生成CSV文件.该对象是具有一些属性的会话,以及具有某些属性的字符串和消息列表以及具有某些属性的注释列表.

会话类如下;

public class Session {

    private Long id;

    private Date startDate;

    private Date endDate;

    private List<Message> messages;

    private List<String> participants;

    public TweetSession() {
    }  

    public TweetSession(Date startDate, List<Message> messages, List<String>     participants) {
        this.startDate = startDate;
        this.messages = messages;
        this.participants = participants;
    }

    public Long getId() {
        return id;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = …
Run Code Online (Sandbox Code Playgroud)

java csv pojo supercsv

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

使用RxAndroid安排

我正在使用RxAndroid observable来检索一些对象(在本例中为String).我的服务如下:

 public Observable<String> getRandomString() {
    return Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {

            //code to retrieve result

            subscriber.onNext("this is a string");
            subscriber.onCompleted();

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

我在演示者中订阅并将结果发布到视图中:

public void loadRandomString() {

    Observable<String> observable = mService.getRandomString();
    observable
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.newThread())
            .subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() { }

                @Override
                public void onError(Throwable e) {
                    mMainView.onError(e.getLocalizedMessage());
                }

                @Override
                public void onNext(String string) {

                    //do something with string
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我希望这个操作定期(每隔x分钟).我可以一次又一次地使用Timer或者ScheduledThreadPoolExecutor这样做但是我想看看RxAndroid领域内是否有一些解决方案.我从2013年发现了一些旧的解决方案,但目前很多代码都被弃用了.这可能是使用某种递归,还是我能以更优雅的方式实现这一点?

提前致谢!

mvp android scheduled-tasks rx-java rx-android

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

使用 AndroidX ExifInterface 从图像中检索 GPS EXIF 数据?

我的目标是 Android 13 并使用新的照片选择器来检索图像。例如

val photoPicker = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.PickMultipleVisualMedia()
    ) { uris: List<Uri> -> handleUris(context, uris) ) }) }

photoPicker.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))

fun handleUris(context: Context, uris: List<Uri>) {
    for (uri in uris) {
        context.contentResolver.openInputStream(uri)!!.use { stream ->
            ExifInterface(stream).let { exif ->
                val dateTime = exif.dateTime // present
                val latLng = exif.latLong // always null
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现了什么:

自 Android 10 起,当您检索媒体时,GPS 信息不再包含在 EXIF 数据中。根据 2019 年的这段视频,您需要请求运行时权限ACCESS_MEDIA_LOCATION

他们解释说这是一个运行时权限,但用户无法在系统设置中看到该权限(这本身就很奇怪)。他们还声称您需要READ_EXTERNAL_STORAGE媒体许可。

这篇文档还讨论了媒体位置权限。

使用以下方式请求许可 …

android runtime-permissions android-jetpack-compose android-exifinterface photo-picker

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

如何在 Jetpack Compose Vector 内缩放组

我正在 Jetpack compose 中为地图中的每个区域使用向量Groups 和s制作国家地图。Path我想要对特定区域的比例进行动画处理,但我很难设置正确的比例pivotX,并且pivotY属于Group应该动画变大和变小的正确区域,导致该区域也在 x 和 y 方向上移动。我的代码如下:

import androidx.compose.animation.core.EaseInOut
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.Group
import androidx.compose.ui.graphics.vector.Path
import androidx.compose.ui.graphics.vector.PathNode
import androidx.compose.ui.graphics.vector.PathParser
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.unit.dp

typealias Province = String

object Netherlands {
    val PathMap = mapOf<Province, List<List<PathNode>>>(
        "Overijssel" to listOf(
            PathParser().parsePathString(
                "m144.01 59.386-1.162 0.77493-0.77463 0.77492h-1.162-0.38732l0.38732 0.77492v0.38746h-0.38732l-0.38731 0.38746-0.77463 0.38746v-0.77492l-1.162 0.38746-0.38732 0.38746v-0.38746h-0.38731l-0.38732-0.38746-0.38731-0.77492v-0.77492l-0.77464 …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

5
推荐指数
1
解决办法
271
查看次数