小编use*_*764的帖子

确定上次Android更新日期的方法

有没有一种方法可以通过编程方式确定上次Android操作系统更新的日期?

android updates android-update-sdk

6
推荐指数
0
解决办法
939
查看次数

使用Android硬件支持的KeyStore

我希望使用Android硬件支持的KeyStore,但我担心安全性和可用性.根据我在这里阅读的内容,当用户更改设备锁定时,KeyStore会被擦除,除非省略了setEncryptionRequired().出于可用性考虑,似乎需要这样做,否则一旦修改了设备锁,所有硬件支持的密钥都将被擦除.

但是,我还在这里读到,硬件支持的密钥实际上并不存储在TEE中,而是作为密钥文件存储在/ data/misc/keystore/user_0 /中,由存储在其中的设备特定密钥加密. TEE.由于设备锁定的更改会擦除KeyStore,因此设备特定密钥似乎是从设备锁定派生的.

出于安全原因,加密密钥文件是有意义的,否则任何root用户都能够读取密钥文件并提取私钥,因为他们可能已经清楚了.

所以我有点陷入两难境地.出于可用性考虑,我应该省略setEncryptionRequired(),但出于安全考虑,我应该设置setEncryptionRequired().

最后,是否可以使用setKeyEntry()将私钥导入硬件支持的KeyStore?我能够做到没有错误,但我不确定它是否是硬件支持的.

我的理解是否正确?

security android keystore

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

如何使用自定义适配器动态更新ListView?

我有一个主要的活动,创造一个ListView和一个Custom Adapter.我能来填充ListView,如果我已经预先创建的列表,但我怎么与动态获取的数据来填充它?

主要活动

public class MainActivity extends Activity {
  private ListView myListView;
  private Context ctx;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.MainActivity);
    ctx = this;
    List<Items> myList = new ArrayList<Items>();

    myList.add(new Item("Name 1", "Desc 1"));
    myList.add(new Item("Name 2", "Desc 2"));
    myList.add(new Item("Name 3", "Desc 3"));
    myList.add(new Item("Name 4", "Desc 4"));
    myList.add(new Item("Name 5", "Desc 5"));

    myListView = (ListView)findViewById(R.id.list);
    MyListAdapter myAdapter = new MyListAdapter(ctx,R.layout.listitem, myList);
    myListView.setAdapter(myAdapter);
  }
}
Run Code Online (Sandbox Code Playgroud)

MyListAdapter

public class MyListAdapter extends ArrayAdapter<Items> …
Run Code Online (Sandbox Code Playgroud)

android listview adapter android-listview

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

InvalidKeyException:密钥库操作在Android设备上的RSA解密上失败

我正在尝试对AndroidKeyStore中的密钥执行RSA加密和解密。加密成功完成,但是当我尝试解密时,它引发InvalidKeyException:Cipher.init()上的密钥库操作失败。

这是我的密钥生成代码:

KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
AlgorithmParameterSpec spec = null;
spec = new KeyGenParameterSpec.Builder(mAlias,
        KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
        .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
        .build();
kpGenerator.initialize(spec);
KeyPair kp = kpGenerator.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

这是我的加密代码:

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(mAlias, null);
Cipher cip = null;
RSAPublicKey pubKey = (RSAPublicKey) entry.getCertificate().getPublicKey();
cip = Cipher.getInstance("RSA/ECB/NoPadding");
cip.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encryptBytes = cip.doFinal(challenge.getBytes());
String encryptedStr64 = Base64.encodeToString(encryptBytes, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

这是我的解密代码:

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(mAlias, null);
Cipher cip = null;
cip = …
Run Code Online (Sandbox Code Playgroud)

encryption android cryptography rsa android-keystore

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

获取 Android APK 使用的 3rd 方库列表

有没有办法在不访问源代码的情况下获取 Android APK 文件使用的第 3 方库列表?

我在想两个选项:

1.使用LibRadar等工具进行检测。但是,据我所知,它使用基于签名的检测,因此并不全面。

2.使用jadx反编译APK文件,手动遍历所有不是app包名的源码文件夹。

例如,如果我的应用程序是 com.myapp,我将遍历 com/myapp 之外的所有源文件夹。

据我所知,这有两个问题

一种。混淆的库将具有混淆的名称,因此我将检测到一堆库为 aaa 、 aab 等

我不知道该停在哪里。例如,一个库的包名可能是com.somelibrary,但主文件夹下可能有多个子文件夹,例如com/somelibrary/a、com/somelibrary/b等。我不知道它的根文件夹是什么图书馆是。

在没有上述限制的情况下,是否有一种一致、准确的方式来列出 3rd 方库?

android libraries

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

在adb shell命令行中将1条命令的输出管道传递给其他命令

我希望向Android设备发送adb shell命令,该命令将输出从1命令传递到其他命令,但是当我尝试这样做时,仅在设备上执行第一个命令,而在主机上执行第二个命令。这是我尝试过的:

adb shell command1 | command2
Run Code Online (Sandbox Code Playgroud)

在设备上执行command1,在主机上执行command2。

我该如何使其正常工作?

谢谢!

shell android pipe adb

4
推荐指数
1
解决办法
2690
查看次数

如何从 root 设备中的 shell 脚本将 stdout 重定向到 logcat?

我在有根的 Android 设备中运行 shell 脚本,我试图通过跟踪 shell 脚本生成的 stdout 输出(通过命令或回显)来调试它。是否可以通过将 stdout 重定向到 logcat 来做到这一点?

shell android stdout logcat

4
推荐指数
1
解决办法
3641
查看次数

如何检测我的活动何时被遮盖?

我希望能够检测我的活动是否被系统警报或其他叠加层(例如,长按电源按钮时的电源菜单)或检测到我的启动的恶意软件所遮盖活动。我注意到在这种情况下,前台应用程序仍将是我的应用程序,因此我不能简单地将其作为前台应用程序。我还注意到,当我的活动被遮盖时,不会调用onPause(),因此我也无法在onPause()中放入任何逻辑。即使可以,我也必须区分系统警报/覆盖和用户按下“后退” /“主页”按钮。

我还有其他方法可以做到这一点吗?

android overlay android-activity system-alert-window

4
推荐指数
2
解决办法
990
查看次数

修改init.rc以添加我自己的android本机服务

我正在使用Android 2.3.3开发飞思卡尔i.mx53主板,我正在尝试将自己的android本机服务添加到init.rc中,以便它在启动时运行.我已经尝试按照http://www.androidenea.com/2009/08/init-process-and-initrc.html上的指南,包括他们的示例服务代码.但是,我正在使用android ndk将示例服务代码构建为ARM二进制文件.

如果我在adb shell中手动运行示例服务.但是,当我把它放在src/system/core/rootdir/init.rc的末尾时,似乎没有任何事情发生.

我在启动后查看设备根目录中的init.rc,它与源中的init.rc不同.值得注意的是,我添加的行不在那里.

可能有什么不对?

android init

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

访问服务的变量

我有一个名为 Main 的 Android Activity,它调用一个名为 MainService 的服务,如下所示:

Intent intent = new Intent(this, MainService.class);
if(MainService.getInstance() == null){
  Log.d(TAG, "Calling MainService");
  startService(intent);
}
Run Code Online (Sandbox Code Playgroud)

MainService 在其生命周期内维护一个变量,我希望稍后在 Main 中访问该变量。我该怎么做呢?

谢谢。

android android-service

3
推荐指数
1
解决办法
6499
查看次数