当前位置: 首页 > 知识库问答 >
问题:

无法在我的android应用程序中使用proguard

阎建华
2023-03-14

我无法在我的应用程序中使用proguard。当我将minify启用为true时,布局屏幕中的textinputlayout工作正常,但我有一个alertdialog,其中包含一个膨胀的XML,该XML没有膨胀(该XML包含一个textinputlayout。请帮助大家。这是代码片段。

PS:我正在使用手机应用程序发帖,请不要抨击对齐不当。我真的需要帮助。

建筑渐变条目--

buildTypes { 
           release {        
           minifyEnabled true 
           proguardFiles getDefaultProguardFile('proguardandroid.txt'),    'proguard-rules.pro'         signingConfig
           signingConfigs.release   
                  } 
          }

       dependencies { compile fileTree(include: ['*.jar'], dir: 'libs')      
       compile 'com.android.support:appcompat-v7:25.1.0'
       compile 'com.google.code.gson:gson:2.2.4'
       compile 'com.android.support:design:25.1.0' 
       compile 'com.android.support:support-v4:25.1.0'
       compile 'com.android.support:cardview-v7:25.1.0'
       compile project(':volley-1.0.0') 
       compile project(':photoview-1.2.4') 
       compile project(':calligraphy-2.2.0') }

XML屏幕中的TextInputLayout--

    <android.support.design.widget.TextInputLayout    
    android:id="@+id/pin_login_wrapper" 
    android:layout_width="match_parent"     
    android:layout_height="wrap_content">   

    <android.support.design.widget.TextInputEditText    
    android:layout_width="match_parent"         
    android:layout_height="wrap_content"        
    android:gravity="center_horizontal"     
    android:hint="Please enter PIN"         
    android:inputType="numberPassword"
    android:maxLength="4" 
    android:textSize="24sp"/>  
    </android.support.design.widget.TextInputLayout>

警报对话框代码

AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), R.style.AlertDialogStyle); 
final TextInputLayout otpWrapper = (TextInputLayout) (LayoutInflater.from(getContext())).inflate(R.layout.single_edit_text_material, null);
otpWrapper.setHint("Please enter OTP"); 
otpWrapper.getEditText().setSingleLine(true); 
otpWrapper.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); 
setEditTextMaxLength(otpWrapper.getEditText(), 6); 
builder.setView(otpWrapper); builder.setNegativeButton("Cancel", null); 
builder.setPositiveButton("Submit", new DialogInterface.OnClickListener(){
    @Override   public void onClick(DialogInterface dialog, int which) {
    } 
 });
 builder.setCancelable(false); final AlertDialog d = builder.create(); 
 d.setCanceledOnTouchOutside(false); d.show();

single_edit_text_material.xml--

    <android.support.design.widget.TextInputLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/wrapper" android:layout_width="match_parent" 
    android:layout_height="wrap_content" android:paddingEnd="8dp" 
    android:paddingStart="8dp" android:paddingTop="8dp"> 
    <android.support.design.widget.TextInputEditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 
    </android.support.design.widget.TextInputLayout>

编辑:当proguard未启用时,对话框弹出,textinputlayout处于工作状态,但当我启用proguard时,对话框弹出,但textinputlayout不存在,只有ok按钮存在。android监视器中没有错误

共有3个答案

姬和歌
2023-03-14

请尝试下面的代码。

为了您的single_edit_text_material.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Please enter OTP">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLength="6" />

    </android.support.design.widget.TextInputLayout>

</LinearLayout>

在要显示警报对话框的活动中,使用以下代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.Theme_AppCompat_Dialog_Alert);
View view = (LayoutInflater.from(this)).inflate(R.layout.single_edit_text_material, null);
TextInputLayout otpWrapper = view.findViewById(R.id.textInput);
EditText editText = view.findViewById(R.id.editText);
builder.setView(view);
builder.setNegativeButton("Cancel", null);
builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    }
});
builder.setCancelable(false);
final AlertDialog d = builder.create();
d.setCanceledOnTouchOutside(false);
d.show();
}

您将获得以下输出:

百里海超
2023-03-14

我没有正确配置proGuard,也没有保留gson库使用的模型。所以我的对象返回的值完全不同。由于启用了proGuard,所以我无法调试,这让我认为我们可能需要对UI元素进行例外处理。但是Pankaj的帮助让我意识到这不是UI所以随机搜索让我意识到我们需要保留gson库使用的模型类

翟柏
2023-03-14

在proguard规则中,忽略程序包和类。

看看下面的例子

如何在使用proguard时保留/排除特定的包路径?

如何让我的班级不被守卫搞混

如何排除proguard保留的类

 类似资料:
  • 我正在使用SeleniumJavaJAR版本:3.4.0Appium,桌面版本:1.4.13.1Java客户端版本:5.0.0-BETA9 代码和所需的功能是: } 但当我运行它时,在eclipse控制台中出现了以下错误: 以下是appium的错误: 试图通过更改不同版本来解决,但无法解决。appium正在显示错误,但同时emulator正在显示已安装的应用程序。 有人有相同的问题吗?请提出解决方

  • 我已经尝试了这里提到的许多解决方案,但我仍然无法解决这个问题。我收到: “Google登录失败。com.google.android.gms.common.api.apiException:10” 下面是我的代码: 附言。我也在同一个项目中使用Firestore数据库。我已经成功地将google-services.json保存在应用程序的文件夹中。

  • 我最近开始使用Android Studio。我正在通过教程学习,我制作了一个下载原始数据的flicker应用程序的一部分。当我每次尝试运行它时,我都会在“消息”选项卡中看到这个错误: 错误:配置项目': app'时发生问题。无法解析配置': app:_debugCompile'的所有依赖项。找不到com.android.support: appcomat-v7:22的任何匹配项。因为com.and

  • 我正在Android Studio中制作一个应用程序,现在正试图通过adb进行调试。当我点击Android这个词和底部栏上的logo时,logcat就会出现并识别出我的设备。然后我看到: 我需要对我的应用程序做什么才能使其“可调试”? 仅供参考,之前在Eclipse中开发这个应用程序,亚行工作得很好。