由于我不能使用私人专家来共享我的图书馆,我正在考虑分享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) 我正在创建一个库,它将根据用户默认设置处理信息,并将其保存在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中测试的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
我正在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) 我想知道设备管理员和配置文件所有者是如何工作的。我遵循了谷歌网站上的一些例子,但我仍然不太清楚个人资料所有者是如何工作的。
为了测试这一点,我构建了一个示例应用程序,它将要求用户接受配置文件所有者,然后在无需用户交互的情况下安装证书。
应个人资料所有者的要求,我在我的活动中执行了以下操作:
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)
为什么当我重新启动应用程序时,配置文件所有者被禁用?有什么方法可以避免用户每次打开应用程序时都启用配置文件所有者模式?
此外,如果我使用此机制安装证书,其他应用程序仍然可以使用此证书,或者该证书仅适用于创建的配置文件?
我试图通过服务为我的应用程序创建一个快捷方式.以下代码正在处理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) 在我的应用程序中,我使用以下内容设置了网络安全配置文件:
<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) 我试图让mcc
和mnc
一个后SIM LOADED
状态,以检查SIM卡的确发生了变化没有READ PHONE STATE
权限,以禁用某些网络应用程序的请求,并在一些国家,用户不想要的.
由于getSimOperator()
可能会根据当前的运营商进行更改(例如,当用户正在漫游时),我决定使用getNetworkOperator()
.
虽然这种方法可以返回null
即使SIM
IS 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) 我试图顺序运行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) 我试图找到一种方法来并行执行请求并在每个可观察对象完成时处理它们。尽管当所有 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) android ×8
kotlin ×2
rx-java ×2
aar ×1
certificate ×1
device-admin ×1
gradle ×1
gsm ×1
jsf-2 ×1
managed-bean ×1
mocking ×1
mockito ×1
pom.xml ×1
rx-android ×1
rx-java2 ×1
unit-testing ×1