小编iGo*_*oDa的帖子

手动添加具有依赖性pom/iml文件的aar

由于我不能使用私人专家来共享我的图书馆,我正在考虑分享aar并导入另一个项目.当aar和jar文件不包含任何依赖项时,问题就出现了.所以一旦我在android studio中手动导入aar(使用Import .JAR/.AA Package)就没有依赖关系,我必须再次手动添加所有依赖项.我已经通过gradle任务生成了一个pom文件,虽然我找不到任何方法在项目上手动导入它.

在"导入.JAR/.AA包"自动生成的build.gradle文件中:

configurations.maybeCreate("default")
artifacts.add("default", file('TestSample_1.0.0.aar'))
Run Code Online (Sandbox Code Playgroud)

有没有办法添加pom/iml文件?就像是:

artifacts.add("default", file('pomDependencies.xml'))
Run Code Online (Sandbox Code Playgroud)

android gradle pom.xml android-studio aar

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

在android测试上重启应用程序

我正在创建一个库,它将根据用户默认设置处理信息,并将其保存在SharedPreferences上,开发人员可以在初始化我的库之前对其进行修改.

SDK应该只为每个应用程序实例初始化一次,否则会触发RuntimeError.所以在Application类的应用程序端应该是这样的:

public class SampleApplication extends Application {
    @Override
    public void onCreate() {
       super.onCreate();

       //Here I can do something that will change the default configs

       //Here I initialize the SDK singleton method
       Sdk.initialize();
    }
}
Run Code Online (Sandbox Code Playgroud)

sdk抽象实现:

public class Sdk {

    private static SampleApplication sInstance;

    private void Sdk(){
    }

    public static SampleApplication getInstance() throws RuntimeException {
        if (sInstance == null) {
            throw new RuntimeException();
        }
        return sInstance;
    }

    public static void initialize() {
        if (sInstance == null) {
            sInstance = new …
Run Code Online (Sandbox Code Playgroud)

android unit-testing android-testing

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

注入模拟演示者对象的浓咖啡

我试图更好地了解用于在android中测试的espresso框架,但是我在尝试模拟我的演示者时遇到了问题.

首先,我在我的应用程序中使用了一些改编的MVP架构,因此,我使用的是View(Activity) - > Presenter - > Model - > Presenter - > View,以发出请求并更新UI.

我的活动一旦创建就会发出请求以更新所有UI,一旦收到结果,就会相应地更新UI.

public class MyActivity extends AppCompatActivity implements IPresenter{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        new Presenter().doRequestToUpdateUI();
    }

    @Override
    public void onResponseReceived(UIObject uiOject){
       findViewById(R.id.button).setVisibility(uiOject.getVisibility());
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此doRequestToUpdateUI()需要一些以前的身份验证,因此需要模拟漏洞呈现器,以便测试我的活动上的其他UI.

有没有办法模拟我的演示者并将其注入活动,或者至少在调用方法doRequestToUpdateUI()时不执行任何操作.

我正在做这样的测试,但直到现在还没有工作.

@LargeTest
@RunWith(AndroidJUnit4.class)
public class MyActivityInstrumentationTest {

    @Mock
    public Presenter presenter;

    @InjectMocks
    public PresenterMock mPresenterMock;

    @Rule
    public ActivityTestRule<MyActivity> mActivityTestRule = new ActivityTestRule<MyActivity>(MyActivity.class, true, false) {
        @Override
        protected void beforeActivityLaunched() {
            presenter = Mockito.mock(Presenter.class);
            Mockito.doNothing().when(presenter).doRequestToUpdateUI();
            super.beforeActivityLaunched();
        }
    }; …
Run Code Online (Sandbox Code Playgroud)

model-view-controller android mocking mockito android-espresso

7
推荐指数
0
解决办法
1365
查看次数

获取SelectOneMenu的选定值

我正在jsf页面上测试组件"SelectOneMenu".我通过我的ManageBean(将从数据库中获取所有动物)以dinamically填充此组件.

我想知道是否有可能看到用户选择的那个"SelectOneMenu"(组合框),我正在尝试使用value ="#{animalsManage.animalSelect}",但它只在页面的开头调用.另外,我正在使用inputText来查看"SelectOneMenu"的选定内容的值.

我做错了什么?

JSF:

    <body>
    <ui:component>
        <h:form>
                    <h:outputText value="Select one Mets File" />
                    <h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}">
                        <f:selectItem itemLabel="Select..."  noSelectionOption="true"/>
                        <f:selectItems value="#{animalsManage.allAnimals}" />
                    </h:selectOneMenu>
                    <h:inputText id="textbox" value="#{animalsManage.animalSelected }" />
        </h:form>
    </ui:component>
</body>
Run Code Online (Sandbox Code Playgroud)

ManageBean:

    @ManagedBean
    @ViewScoped
    public class AnimalsManage implements Serializable {

    @EJB
    private AnimalsFacadeREST animalsFacadeREST;
    private String animalSelected;
    private List< SelectItem> selectAnimals;

    public List<SelectItem> getAllAnimals() {
            List<Animals> al = animalsFacadeREST.findAll();
            selectAnimals = new ArrayList< SelectItem>();
            int i = 0;
            for (Animals animal: al) {
                selectAnimals.add(new SelectItem(i, animal.getName()));
                i++;
            }
            return …
Run Code Online (Sandbox Code Playgroud)

selectonemenu jsf-2 managed-bean

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

Android 设备管理员/配置文件所有者

我想知道设备管理员和配置文件所有者是如何工作的。我遵循了谷歌网站上的一些例子,但我仍然不太清楚个人资料所有者是如何工作的。

为了测试这一点,我构建了一个示例应用程序,它将要求用户接受配置文件所有者,然后在无需用户交互的情况下安装证书。

应个人资料所有者的要求,我在我的活动中执行了以下操作:

Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE);
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, getApplicationContext().getPackageName());
startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE);
Run Code Online (Sandbox Code Playgroud)

在我的接收器上我有这样的东西:

@Override
public void onProfileProvisioningComplete(Context context, Intent intent) {
    // Enable the profile
    DevicePolicyManager manager =
            (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
    ComponentName componentName = getComponentName(context);
    manager.setProfileName(componentName, context.getString(R.string.profile_name));

    // If I do not do this, the application will not enter in profile mode, and I don't know why 
    Intent launch = new Intent(context, MainActivity.class);
    launch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(launch);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我不知道为什么需要重新启动应用程序,以便我可以进入配置文件所有者模式。不过,当我让配置文件所有者工作并关闭应用程序并再次启动它时,我不会恢复配置文件所有者模式。

我正在通过在应用程序 OnCreate() 方法上执行类似的操作来检查配置文件所有者模式是否处于活动状态:

  if (!mDeviceController.isProfileActive()) {
      Log.i("DeviceAdminSample", "Profile is disabled!!!!!");
  }
Run Code Online (Sandbox Code Playgroud)

为什么当我重新启动应用程序时,配置文件所有者被禁用?有什么方法可以避免用户每次打开应用程序时都启用配置文件所有者模式?

此外,如果我使用此机制安装证书,其他应用程序仍然可以使用此证书,或者该证书仅适用于创建的配置文件?

android certificate device-admin profile-owner

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

Android M快捷方式安装/卸载重复

我试图通过服务为我的应用程序创建一个快捷方式.以下代码正在处理SDK <= 21,但它无法正常工作SDK = 23

快捷方式的创建方式是这样完成的:

        Intent shortcutIntent = new Intent(this, MainActivity.class);
        shortcutIntent.putExtra(EXTRA_SHORTCUT_CLICKED, true); //This is only to check when the user clicked on the created shortcut
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

        Intent addIntent = new Intent();
        addIntent.putExtra("duplicate", false);
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "TEST");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.application_icon));
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

        sendBroadcast(addIntent);
Run Code Online (Sandbox Code Playgroud)

SDK <= 21创建快捷方式中,如果已存在,则不会创建其他实例.

SDK = 23快捷方式将仅如果我按创建shorcut并再次尝试创建快捷方式.如果我重新启动该设备,然后再次尝试创建快捷方式复制或.

我尝试先卸载快捷方式,但没有成功SDK 23,如下所示:

        Intent shortcutIntent = new Intent(this, MainActivity.class);
        shortcutIntent.putExtra(EXTRA_SHORTCUT_CLICKED, true); //This is only to check when the user clicked …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-6.0-marshmallow

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

合并 Manifest 中的 NetworkSecurityConfig xml 文件

在我的应用程序中,我使用以下内容设置了网络安全配置文件:

<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

我在清单中设置如下:

  <application 
             (...)
              android:networkSecurityConfig="@xml/network_security_config">
Run Code Online (Sandbox Code Playgroud)

此外,我添加了一个第三方库,它提供自己的网络安全配置文件和一组域

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">domainA</domain>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

他们在我的清单中设置如下:

  <application android:networkSecurityConfig="@xml/network_security_config">
Run Code Online (Sandbox Code Playgroud)

问题是清单合并仅适用于manifest.xml 文件(afaik),因此 netowrk-security-config 文件将始终是应用程序文件,而不是应用程序和第 3 方网络安全配置文件之间的合并,即有办法实现这样的事情吗?

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">domainA</domain>
    </domain-config>
     <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

android android-manifest kotlin

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

Android MCC和MNC

我试图让mccmnc一个后SIM LOADED状态,以检查SIM卡的确发生了变化没有READ PHONE STATE权限,以禁用某些网络应用程序的请求,并在一些国家,用户不想要的.

由于getSimOperator()可能会根据当前的运营商进行更改(例如,当用户正在漫游时),我决定使用getNetworkOperator().

虽然这种方法可以返回null即使SIMIS LOADED,可能会返回不同的结果,如莱卡移动通讯卡仅限GSM连接是给我mnc = 01,当我把SIM卡取出并再次把它放在它给了我mnc = 04.

有人知道为什么mnc会给出不同的结果getNetworkOperator()吗?哪种方法更好,getNetworkOperator()或者getSimOperator()对于这种情况?

此外,我不能使用,getResources().getConfiguration().mcc因为它给出一个int数字可能会删除0之前,例如给出4而不是04.

这是我检查SIM状态更改的代码:

@Override
public void onReceive(final Context context, Intent intent) {
    if (intent != null) {

        Bundle extras = intent.getExtras();

        if (extras != null) {
            String ss = extras.getString(EXTRAS_SIM_STATUS);
            if (ss != null …
Run Code Online (Sandbox Code Playgroud)

android gsm mobile-country-code

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

RxJava - 在给出异常后继续连续

我试图顺序运行2个observable,但是,如果第一个给出一个特定的错误,我想停止concat并执行另一个东西.

尽管如此,第一个observable可能会给出很多异常,我只想在达到特定错误时停止传播concat(在本例中为HttpException 403),另一方面我想在没有任何异常时继续执行concat执行403 HttpException.

我已经完成了以下代码,但到目前为止,我无法继续执行concat执行,将当前的observable替换为Observable.error(throwable).

有没有一种方法可以在不改变可观察逻辑或用户逻辑的情况下完成它?或者某些东西停止传播特定错误的concat,并在给出其他错误时继续?

 Observable.concat(getObservable1(), getObservable2())
                    .onErrorResumeNext(new Func1<Throwable, Observable<? extends OperationModel>>() {
                                @Override
                                public Observable<? extends OperationModel> call(Throwable throwable) {
                                    if(throwable instanceof HttpException && ((HttpException)throwable).code() == 403) {
                                            return Observable.error(throwable);
                                    }
                                     return Observable.empty(); //here I just want to proceed the concat despite giving an error
                                }
                    .subscribeOn(Schedulers.io()) //execute requests should be on io() thread
                    .observeOn(AndroidSchedulers.mainThread()) 
                    .subscribe(new CustomRequestSubscriber<>());
Run Code Online (Sandbox Code Playgroud)

android rx-java

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

RxAndroid - 使用 Zip 运算符处理错误

我试图找到一种方法来并行执行请求并在每个可观察对象完成时处理它们。尽管当所有 observables 都给出响应时一切都在工作,但我没有看到在一切都完成后处理所有错误的方法。

这是 zip 运算符的示例,它基本上并行执行 2 个请求:

Observable.zip(
                getObservable1()
                        .onErrorResumeNext { errorThrowable: Throwable ->
                            Observable.error(ErrorEntity(Type.ONE, errorThrowable))
                        }.subscribeOn(Schedulers.io()),
                getObservable2()
                        .onErrorResumeNext { errorThrowable: Throwable ->
                            Observable.error(ErrorEntity(Type.TWO, errorThrowable))
                        }.subscribeOn(Schedulers.io()),
                BiFunction { value1: String, value2: String ->
                    return@BiFunction value1 + value2
                })
                //execute requests should be on io() thread
                .subscribeOn(Schedulers.io())
                //there are other tasks inside subscriber that need io() thread
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        { result ->
                            Snackbar.make(view, "Replace with your own action " + result, Snackbar.LENGTH_LONG)
                                    .setAction("Action", null).show()
                        },
                        { error ->
                            Log.d("TAG", "Error …
Run Code Online (Sandbox Code Playgroud)

error-handling kotlin rx-java rx-android rx-java2

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