小编EGH*_*HDK的帖子

Android RSA Keypair Generation - 我应该使用Standard Java/Bouncy Castle/Spongy Castle/JSch/Other吗?

我一直在寻找一周左右的时间来实现我想到的方法.我已经看过很多关于所有这些不同方法的文章,但我仍然感到困惑,所以我希望有人可以传播他们对这些主题的知识,这样我就可以更轻松地创建我追捧的方法和在Android中实现它.

我的"追捧"方法:

  1. 必须生成RSA公钥和私钥
  2. 公共必须有PKCS#1填充
  3. 必须是RSA 2048
  4. 返回Byte数组中的公钥

显然你可以用四种方式去做:

  1. 标准Java
  2. 充气城堡
  3. 海绵城堡(Android友好?)
  4. JSch

由于我对安全性和Java整体都很陌生,所以我想知道是否有人能够最终对所有这些做出明确的解释.

以下是我尝试在4种不同的编程方法中实现我所追求的方法(如上所述)的方法.如果我不知道它是什么,因为我无法弄清楚各自的文件.请随时纠正我.

1.标准Java(不确定PKCS#1):

public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException {
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(2048);
    KeyPair keyPair = kpg.genKeyPair();
    byte[] pri = keyPair.getPrivate().getEncoded();
    byte[] pub = keyPair.getPublic().getEncoded();
    return pub;
}
Run Code Online (Sandbox Code Playgroud)

2. Bouncy Castle(尚未功能= /创意?):

public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException {
    RSAKeyPairGenerator r = new RSAKeyPairGenerator();
    r.init(new KeyGenerationParameters(new SecureRandom(),4096));
    AsymmetricCipherKeyPair keys = r.generateKeyPair();
    CipherParameters pri = keys.getPrivate();
    CipherParameters pub = keys.getPublic();
    byte[] pubbyte = pub.toString().getBytes();
    return pubbyte; //NOT WORKING …
Run Code Online (Sandbox Code Playgroud)

java security android rsa bouncycastle

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

如何在Android Studio 1.1中运行简单的JUnit4测试?

我有一个显示"Hello World"的Android项目.它是从Android Studio的"空白活动"模板创建的.

然后我在我的应用程序包中添加/创建一个新的java类(与我的活动相同的包).我称之为Shape并添加一个简单的构造函数

public class Shape {
    public Shape(int i){
        if (i==0){
            throw new IllegalArgumentException("Cant have 0");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

大.现在我有一个完全没有触及Android的课程,我想对它进行单元测试.接下来我该怎么办?

这是我的问题停止的地方.下面我将介绍我尝试过的内容.

请注意,我以前从未在Android或Java中测试过.对不起"菜鸟"的错误.

  1. 在Shape.java中,我转到"导航">"测试"
  2. 按Enter键选择"创建新测试"
  3. 获取此弹出窗口,然后选择JUNIT4.

在此输入图像描述

  1. 然后我点击修复按钮修复未找到的库
  2. 我得到这个弹出窗口

在此输入图像描述

  1. 我不确定要选择什么,所以我选择默认/突出显示.
  2. 我写了我的考试

    package com.eghdk.getjunit4towork;
    
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class ShapeTest {
        @Test(expected = IllegalArgumentException.class)
        public void testShapeWithInvalidArg() {
            new Shape(0);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此时,我不确定如何运行我的测试,但尝试这样做: 在此输入图像描述

  4. 我跑步时遇到这些错误

    错误:(3,17)Gradle:错误:包org.junit不存在
    错误:(5,24)Gradle:错误:包org.junit不存在
    错误:(8,6)Gradle:错误:找不到符号课堂考试

java junit android unit-testing android-studio

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

如何从Espresso中获取视图以传递到IdlingResource?

我基本上是有一个自定义IdlingResource,需要一个View构造函数的参数.我找不到真正谈论如何实现它的任何地方.

我正在尝试使用这个答案:https://stackoverflow.com/a/32763454/1193321

正如你所看到的,它需要一个ViewPager,但是当我IdlingResource在我的测试课程中注册时,我不确定如何获得我的观点.

我已经尝试了findViewById(),我已经尝试了当前正在运行的活动然后调用findViewById()它,没有运气.

任何人都知道在这种情况下该怎么做?

java android android-studio android-espresso

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

替换碎片不起作用/我是否以正确的方式执行此操作?

我花了一些时间把头包裹在碎片上,但这应该是我关于碎片的最后一个问题,因为我认为我只是让它们失效了.我知道这是一堆乱七八糟的代码.但我很感激帮助,以确保我没有破坏任何碎片的基本规则.

我将发布我的所有代码,看看是否有人可以"查看它",看看我是否犯了重大错误,或者我是否应该采用更简单的方法.最后,正如标题中所述,我的片段没有被替换......它被添加到顶部.

文件树:

在此输入图像描述

MainActivity.java:

package com.example.learn.fragments;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;

public class MainActivity extends FragmentActivity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    /* Add a class to handle fragment */
    public static class SSFFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // Inflate the layout …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments

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

在Android中更改AutoCompleteTextView的宽度

我被困在这几天了.我的布局中有一个autoCompleteTextView和一个50/50的按钮.自动完成功能正常,但建议只占屏幕的一半(相当于我的textView占用的大小).我怎么能改变它来占据整个宽度?

原谅我糟糕的油漆技巧:

Blue = AutoCompleteTextView Red =所需的自动填充建议

这似乎是一个微不足道的问题,但只是将宽度更改为fill_parent不起作用.任何想法xml或编程?

解决方案: myAutoCompleteTextView.setDropDownWidth(ViewGroup.LayoutParams.MATCH_PARENT)

在此输入图像描述

编辑: 我的第一个问题似乎已经解决,但现在如果我切换我的按钮和我的autoCompleteTextView我得到另一个奇怪的问题.宽度从textView开始的位置开始.让我有一个不可取的结果.

解决方案:请参阅用户编辑1:vikram

在此输入图像描述

java xml android autocompletetextview android-listview

19
推荐指数
2
解决办法
7503
查看次数

在Android中使用createScaledBitmap创建缩放位图

我想创建一个缩放的位图,但我似乎得到了一个不成比例的图像.它看起来像一个正方形,而我想成为矩形.

我的代码:

Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, 960, 960, false);
Run Code Online (Sandbox Code Playgroud)

我希望图像的最大值为960.我该怎么做?设置宽度null不编译.它可能很简单,但我无法绕过它.谢谢

java android bitmap

17
推荐指数
2
解决办法
7万
查看次数

如何从Android Studio中的根风格继承两种构建风格?

我曾经有过以下项目风味:

  1. 苹果
  2. 橙子

最初唯一的区别是applicationId/packageName.现在有一个不同的java文件.准确地说是自定义ArrayAdapter.解决方案是创建src/Applesrc/Orange继承src/main.我删除从Java文件src/main并把拷贝到src/Applesrc/Orange和适当修改它.世界上一切都很好.

快进几周,现在大约有10个不同的Apple和Orange之间的java文件.再说......没什么大不了的.易于操作.在src/Apple和中分隔java文件src/Orange.

快进到今天.我需要稍微修改一下,因为我希望每个都有免费的高级版本.免费版和高级版仅因URL而异.我打算简单地创建一个名为的新类型:

  1. AppleFree
  2. ApplePremium
  3. OrangeFree
  4. OrangePremium

我有一个困境.从现在起src/Apple,src/Orange有10个不同的文件已被更改...如果我更改任何java文件,AppleFree我必须确保我做同样的事情ApplePremium.我有点处于十字路口,希望我的问题在这一点上有意义.我提出了三种可能的解决方案,但我不确定如何实现它们/什么是正确的方法/解决方案不是我想要的.

解决方案1:

使用if语句 if (BuildConfig.FLAVOR==appleFree) {//use free Url} else {// use premium url}

问题:两个Urls在技术上都编译成了apk.我不想要这个.

解决方案2:

让src/AppleFree和src/ApplePremium以某种方式从src/Apple父目录继承.

问题:不知道我会怎么做.

解决方案3:

在build.gradle中添加免费和高级网址是这样的吗?

    productFlavors {
            appleFree {
                applicationId "com.example.apple.free"
                versionName "1.0"
                url "http://freeurl.com"
                versionCode 1
            }
            applePremium {
                applicationId "com.example.apple.premium"
                versionName "1.0"
                url "http://premiumurl.com"
                versionCode 1 …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio build.gradle android-gradle-plugin

17
推荐指数
1
解决办法
5856
查看次数

试图在Android中使用holo主题无法正常工作

我一直试图在Android中设置一个全息主题,但我无法让它识别它.有任何想法吗?

张贴是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" android:theme="@android:style/Theme.Holo">
        <activity
            android:name=".TestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

@android:style/Theme.Holo即使我将minSdkVersion更改为11,它也会给我一条红线.任何想法?

更新:

我改了行<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15"/>,以<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15"/>我仍然得到同样的错误.

更新2:

这最终导致我的目标api在清单中正确指定,但在项目属性中没有.很奇怪,但现在还好.

java android android-manifest android-layout

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

在Android中更改Switch的颜色

我正在尝试更改Android中交换机的颜色.我意识到我需要新的9件.我去了http://android-holo-colors.com/并选择了我的颜色并选择了(Switch Jelly Bean).要使用Switch Jelly Bean,我必须使用:https://github.com/BoD/android-switch-backport.要将它导入我的项目,我必须添加:

<item name="switchStyle">@style/Widget.Holo.CompoundButton.Switch</item>

到我的样式,然后在xml我必须像这样使用开关:

<org.jraf.android.backport.switchwidget.Switch android:layout_width="wrap_content" android:layout_height="wrap_content" />

现在用开关的一切工作正常.接下来,我从android全息颜色生成器输出所有内容并将其放入正确的文件中:

  • drawable(2个选择器文件)
  • drawable-hdpi(9个补丁文件)
  • drawable-xhdpi(9个补丁文件)
  • drawable-xxhdpi(9个补丁文件)

然后我添加到我的xml:

<org.jraf.android.backport.switchwidget.Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:thumb="@drawable/apptheme_switch_inner_holo_light" android:track="@drawable/apptheme_switch_track_holo_light" />

但它仍然是原始的蓝色.我相信我正在做的一切正确.一切都编译(xml,java).注意:我org.jraf.android.backport.switchwidget.Switch也在我的java中导入.有任何想法吗?

java xml android android-theme android-styles

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

在OSX上运行./gradlew时,JAVA_HOME设置为无效目录

我尝试./gradlew从Android项目目录运行,但是我得到一个错误:

错误:JAVA_HOME设置为无效目录:/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

请在您的环境中设置JAVA_HOME变量以匹配Java安装的位置.

我试过的事情:

  1. 导航到/Library/Java/JavaVirtualMachines.jdk1.8.0_11.jdk存在,但也存在jdk1.7.0_79.jdk

  2. which java 打印出来 /usr/bin/java

  3. printenv 版画

...

JAVA_HOME =/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home JDK_HOME =/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

...

  1. javac -version 版画 javac 1.8.0_11

  2. which javac 版画 /usr/bin/javac

java macos android gradle

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