小编Bry*_*yan的帖子

Shell脚本语法错误:意外的文件结束

在以下脚本中,我收到一个错误:

语法错误:意外的文件结束

这个错误是什么我可以恢复它?它指向调用函数的行.

#!/bin/sh

expected_diskusage="264"
expected_dbconn="25"
expected_httpdconn="20"
expected_cpuusage="95"
#expected_fd="100"

httpdconn=`ps -ef|grep -i httpd|grep -v grep|wc -l` #httpd connections
cpu_usage=`ps aux|awk 'NR > 0 { s +=$3 }; END {print s}'`
disk_usage=`df -h|awk {'print $2'}|head -n3|awk 'NF{s=$0}END{print s}'`
#db_connections=`mysql -uroot -pexxxxxx -s -N -e "show processlist"|wc -l`

db_connections=6
cld_alert()
{
    nwconn=$1
    cpu_usage=$2
    disk_usage=$3
    db_connections=$4
    message=$5
    `touch /tmp/alert.txt && > /tmp/alert.txt`
    date=`date`
    echo -e "$date\n" > /tmp/alert.txt
    echo -e "$message" >> /tmp/alert.txt
    path="/proc/$httpd/fd/";
    cd $path
    tfd=`ls -l|wc -l`;
    sfd=`ls -ltr|grep sock|wc -l`; …
Run Code Online (Sandbox Code Playgroud)

shell sh

43
推荐指数
6
解决办法
26万
查看次数

Android指纹API加密和解密

我正在使用Android M指纹API来允许用户登录该应用程序.为此,我需要在设备上存储用户名和密码.目前我有登录工作,以及指纹API,但用户名和密码都存储为纯文本.我想在存储之前加密密码,并且能够在用户使用指纹进行身份验证后检索密码.

我正在努力解决这个问题.我一直试图从Android安全样本中应用我能做的,但每个例子似乎只处理加密或签名,而不是解密.

到目前为止,我必须获得AndroidKeyStorea KeyPairGenerator和a 的实例Cipher,使用非对称加密技术来允许使用Android KeyGenParameterSpec.Builder().setUserAuthenticationRequired(true).非对称加密的原因是因为如果用户未经过身份验证,该setUserAuthenticationRequired方法将阻止对密钥的任何使用,但是:

此授权仅适用于密钥和私钥操作.公钥操作不受限制.

这应该允许我在用户使用其指纹进行身份验证之前使用公钥加密密码,然后仅在用户通过身份验证后使用私钥进行解密.

public KeyStore getKeyStore() {
    try {
        return KeyStore.getInstance("AndroidKeyStore");
    } catch (KeyStoreException exception) {
        throw new RuntimeException("Failed to get an instance of KeyStore", exception);
    }
}

public KeyPairGenerator getKeyPairGenerator() {
    try {
        return KeyPairGenerator.getInstance("EC", "AndroidKeyStore");
    } catch(NoSuchAlgorithmException | NoSuchProviderException exception) {
        throw new RuntimeException("Failed to get an instance of KeyPairGenerator", exception);
    }
}

public Cipher getCipher() {
    try {
        return …
Run Code Online (Sandbox Code Playgroud)

encryption android android-keystore android-fingerprint-api

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

如何在XML中使用指定的字体权重

使用XML中字体功能,您可以为字体系列指定各种字体粗细.例如:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto">

    <font android:font="@font/archivo_narrow_regular" android:fontWeight="400" android:fontStyle="normal"
        app:font="@font/archivo_narrow_regular" app:fontWeight="400" app:fontStyle="normal"/>

    <font android:font="@font/archivo_narrow_regular_italic" android:fontWeight="400" android:fontStyle="italic"
        app:font="@font/archivo_narrow_regular_italic" app:fontWeight="400" app:fontStyle="italic"/>

    <font android:font="@font/archivo_narrow_medium" android:fontWeight="500" android:fontStyle="normal"
        app:font="@font/archivo_narrow_medium" app:fontWeight="500" app:fontStyle="normal"/>

    <font android:font="@font/archivo_narrow_medium_italic" android:fontWeight="500" android:fontStyle="italic"
        app:font="@font/archivo_narrow_medium_italic" app:fontWeight="500" app:fontStyle="italic"/>

    <font android:font="@font/archivo_narrow_semibold" android:fontWeight="600" android:fontStyle="normal"
        app:font="@font/archivo_narrow_semibold" app:fontWeight="600" app:fontStyle="normal"/>

    <font android:font="@font/archivo_narrow_semibold_italic" android:fontWeight="600" android:fontStyle="italic"
        app:font="@font/archivo_narrow_semibold_italic" app:fontWeight="600" app:fontStyle="italic"/>

    <font android:font="@font/archivo_narrow_bold" android:fontWeight="700" android:fontStyle="normal"
        app:font="@font/archivo_narrow_bold" app:fontWeight="700" app:fontStyle="normal"/>

    <font android:font="@font/archivo_narrow_bold_italic" android:fontWeight="700" android:fontStyle="italic"
        app:font="@font/archivo_narrow_bold_italic" app:fontWeight="700" app:fontStyle="italic"/>

</font-family>
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何实际利用这些权重; 无论是在XML(布局/样式)文件中,还是在Java代码中.它们没有fontWeight可用的属性TextView,并且Typeface创建的对象ResourcesCompat.getFont(context, R.font.archivo_narrow)没有提到字体权重.

我意识到我只能指定特定的字体资源(即 …

android android-fonts android-xml android-styles

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

当传递null时,有没有办法在非可选参数上使用默认值?

例如,如果我有以下数据类:

data class Data(
    val name: String = "",
    val number: Long = 0
)
Run Code Online (Sandbox Code Playgroud)

和可以返回的功能null:

fun newName(): String? {}

fun newNumber(): Long? {}
Run Code Online (Sandbox Code Playgroud)

我知道如果不是,我可以使用以下代码来使用函数的值null:

val newName = newName()
val newNumber = newNumber()

val data = Data(
        if (newName != null) newName else "",
        if (newNumber != null) newNumber else 0
)
Run Code Online (Sandbox Code Playgroud)

但有没有办法在值为时使用Data类的构造函数中指定的默认值null

我在文档中找不到任何内容,但我希望这样的东西能够工作:

val data = Data(newName()?, newNumber()?)
Run Code Online (Sandbox Code Playgroud)

但那不编译.

nullable default-parameters kotlin

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

监听器绑定; 找不到塞特犬

我正在尝试实现侦听器绑定,但是当我运行我的代码时,我收到以下错误:

Caused by: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:onClick' with parameter type lambda on android.widget.Button. file:~/GithubBrowser/app/src/main/res/layout/loading_state.xml loc:30:31 - 30:52 ****\ data binding error ****
Run Code Online (Sandbox Code Playgroud)

这是有问题的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <import type="com.example.app.data.model.Resource"/>
        <import type="com.example.app.data.model.Status"/>
        <variable name="resource" type="Resource"/>
        <variable name="callback" type="com.example.app.ui.common.RetryCallback"/>
    </data>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="@dimen/default_margin">

        <Button android:id="@+id/retry"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/retry"
            android:onClick="@{() -> callback.retry()}"/>

    </LinearLayout>

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

这是RetryCallback布局中引用的接口:

package com.example.app.ui.common

interface RetryCallback {

    fun …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-databinding

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

IllegalArgumentException:savedInstanceState指定为Non-Null为Null

我开始时遇到一个奇怪的错误MainActivity:

06-16 16:01:05.193 2083-2083/? E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.android.example.github, PID: 2083
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.example.github/com.android.example.github.ui.MainActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
            at android.app.ActivityThread.-wrap12(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6121)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
          Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
            at com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt)
            at android.app.Application.dispatchActivityCreated(Application.java:197)
            at android.app.Activity.onCreate(Activity.java:961)
            at android.support.v4.app.BaseFragmentActivityGingerbread.onCreate(BaseFragmentActivityGingerbread.java:54)
            at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:319)
            at com.android.example.github.ui.MainActivity.onCreate(MainActivity.kt:20)
            at android.app.Activity.performCreate(Activity.java:6682)
            at …
Run Code Online (Sandbox Code Playgroud)

android android-activity kotlin

27
推荐指数
4
解决办法
9038
查看次数

为什么ContextThemeWrapper现在仅限于支持库组?

我开始使用a ContextThemeWrapper来动态地应用一个样式ImageButton; 基于对我的另一个问题的回答,以及对其他类似 问题的回答.

ContextThemeWrapper wrapper = new ContextThemeWrapper(getContext(), mStyleRes);
mImageButton = new AppCompatImageButton(wrapper, null, 0);
Run Code Online (Sandbox Code Playgroud)

但最近一个lint错误开始出现在ContextThemeWrapper构造函数上:

ContextThemeWrapper 只能从同一个库组中调用(groupId = com.android.support)

我注意到标有@RestrictTo(LIBRARY_GROUP)注释的类,这会导致lint错误出现.但是我找不到任何关于它为什么仅限于com.android.support图书馆组的信息.

据我所知,这是以View编程方式应用样式,主题或主题叠加的唯一方法; 除了将默认样式属性设置为构造函数中的第三个参数之外.所以我想知道为什么它的使用会受到限制; 在支持库之外使用类有什么问题吗?可能会有我不知道的副作用吗?


我遇到的唯一类似的问题是关于(现在已修复)的错误; 导致此lint错误显示在onCreate子类的方法上AppCompatActivity.我认为这不是一个错误,而是一个故意的限制; 我想知道背后的推理.

我应该注意; 这个限制(截至目前)实际上似乎对使用a的代码没有影响ContextThemeWrapper.它编译并运行良好,并按照我的预期工作.

android syntax-error android-context android-lint android-support-library

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

使用KClass类型绑定到映射

我试图ViewModel通过它们的KClass类型将子类绑定到地图中:

@Module abstract class ViewModelModule {

    @Binds @IntoMap @ViewModelKey(MyViewModel::class)
    abstract fun bindsMyViewModel(viewModel: MyViewModel): ViewModel

    @Binds abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory

}
Run Code Online (Sandbox Code Playgroud)

但我得到Dagger编译错误:

e: ~/Example/app/build/tmp/kapt3/stubs/debug/com/example/app/injection/AppComponent.java:5: error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<kotlin.reflect.KClass<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
e: 

e: public abstract interface AppComponent {
e:                 ^
e:       java.util.Map<kotlin.reflect.KClass<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> is injected at
e:           com.example.app.ui.ViewModelFactory.<init>(creators)
e:       com.example.app.ui.ViewModelFactory is injected at
e:           com.example.app.injection.ViewModelModule.bindViewModelFactory(p0)
e:       android.arch.lifecycle.ViewModelProvider.Factory is injected at
e:           com.example.app.ui.MyFragment.setViewModelFactory(p0)
e:       com.example.app.ui.MyFragment is injected …
Run Code Online (Sandbox Code Playgroud)

android dependency-injection kotlin dagger dagger-2

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

Kapt Build使用Dagger Android处理器失败

我试图在我的项目中使用Kotlin Annotation Processing Tool(kapt)包含Dagger Android处理器(此处记录).

我在我的build.gradle文件中包含了正确的依赖项:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
    }) …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger-2 kapt

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

不应使用ECB模式的密码

我正在尝试使用Cipher带有RSA密钥对的a "AndroidKeyStore".在我能找到的所有Android文档中,示例显示Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding")Cipher.getInstance("RSA/ECB/PKCS1Padding").两者都在Android Studio上提出相同的警告:

不应使用ECB加密

Cipher#getInstance不应该使用ECB作为密码模式调用,或者不设置密码模式,因为android上的默认模式是ECB,这是不安全的.

显然我不能省略它,或者将模式设置为None,因为默认是ECB.如果ECB模式不安全,我应该使用哪种模式?

如果我使用任何其他模式(我知道),我会得到一个NoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Padding.填充可能是问题吗?

无论哪种方式,根据Android KeyStore系统文档,ECB模式似乎是它在使用RSA时支持的唯一密码块模式.

encryption android rsa android-keystore

16
推荐指数
2
解决办法
6646
查看次数