Android Studio 中的 Gradle 构建问题
Posted
技术标签:
【中文标题】Android Studio 中的 Gradle 构建问题【英文标题】:Gradle Build problems in Android Studio 【发布时间】:2016-07-11 12:13:31 【问题描述】:我的同事使用classpath 'com.android.tools.build:gradle:1.1.0'
在 Android Studio 1.4 的 API 21 上开发了一个 Android 应用程序。另外,他使用的是Java jdk1.7.0_75。
现在我需要继续这个项目的工作。但我使用的是 Android Studio 2.1.1,并且想使用 API 22 或 23。我的 gradle 版本是 classpath 'com.android.tools.build:gradle:2.1.0'
,我使用的是 Java jdk1.8.0_91。
如果我尝试在与他相同的 Android 设备上“运行”该应用程序,我会收到以下错误:
Executing tasks: [:app:assembleDebug]
Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72100Library
:app:prepareComAndroidSupportRecyclerviewV72100Library
:app:prepareComAndroidSupportSupportV42100Library
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugBuildConfig UP-TO-DATE
:app:mergeDebugShaders UP-TO-DATE
:app:compileDebugShaders
:app:generateDebugAssets
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugManifest
:app:processDebugResources
:app:generateDebugSources
:app:incrementalDebugJavaCompilationSafeguard
:app:compileDebugJavaWithJavac
:app:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
C:\Users\z565719\AndroidStudioProjects\DrescherBluetoothCanCom\app\src\main\java\z550583\com\navigationdrawer\ConnectFragment.java:133: error: incomparable types: Object and int
if (data.get(userDatabaseAdapter.ACCESS_NAME) == 1)
^
[24 more errors like the one above...]
^
Note: C:\Users\z565719\AndroidStudioProjects\DrescherBluetoothCanCom\app\src\main\java\z550583\com\navigationdrawer\MainActivity.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
25 errors
:app:compileDebugJavaWithJavac FAILED
FAILURE: Build failed with an exception.
出了什么问题:
任务“:app:compileDebugJavaWithJavac”执行失败。 编译失败;有关详细信息,请参阅编译器错误输出。
尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。
构建失败
总时间:1 分 40.139 秒
我不知道问题出在哪里,因为如果我尝试使用他的笔记本电脑(使用他的旧版 Android Studio ..)运行该应用程序,该应用程序可以运行!
谁能解释错误
:app:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.)
更新
@AshishRanjan 要求提供文件。这是我的 ConnectFragment.java:
public class ConnectFragment extends Fragment
private View rootView;
private Toolbar mToolbar;
private BluetoothComService bluetoothComService;
private boolean isBound = false;
private TextView tvDiConDi;
private ProgressBar pb;
private int CurrentInitProgress = 0;
private int PastInitProgress = 0;
private boolean connectionDetailClicked;
private ImageView ivConnectionDetail;
private ToggleButton tglConnect;
private EditText eTBaudRate;
private EditText eTDbcName;
private LinearLayout LLShowDetail;
private LinearLayout LLConnectToggle;
private LinearLayout LLBaudRate;
private UserDatabaseAdapter userDatabaseAdapter;
private HashMap data;
private ConnectThread connectThread;
private boolean displayThreadLoop = true;
private ServiceConnection mConnection = new ServiceConnection()
@Override
public void onServiceConnected(ComponentName className, IBinder service)
BluetoothComService.LocalBinder binder = (BluetoothComService.LocalBinder) service;
bluetoothComService = binder.getService();
isBound = true;
@Override
public void onServiceDisconnected(ComponentName name)
isBound = false;
;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
@Override
public void onStart()
super.onStart();
// Bindet an den BluetoothService
Intent intent = new Intent(getActivity(), BluetoothComService.class);
getActivity().bindService(intent, mConnection, getActivity().getApplicationContext().BIND_AUTO_CREATE);
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
rootView = inflater.inflate(R.layout.fragment_connect, container, false);
tvDiConDi = (TextView) rootView.findViewById(R.id.tv_display_connect_description);
ivConnectionDetail = (ImageView) rootView.findViewById(R.id.arrow_connection_details);
pb = (ProgressBar) rootView.findViewById(R.id.progress_bar_connect);
pb.setProgress(StateSingleton.getInstance().getProgressConnectState());
eTBaudRate = (EditText) rootView.findViewById(R.id.edit_baud_rate);
eTDbcName = (EditText) rootView.findViewById(R.id.edit_dbc_name);
LLBaudRate = (LinearLayout) rootView.findViewById(R.id.linear_layout_baud_rate);
LLShowDetail = (LinearLayout) rootView.findViewById(R.id.linear_layout_show_detail);
LLConnectToggle = (LinearLayout) rootView.findViewById(R.id.linear_layout_connect_toggle);
tglConnect = (ToggleButton) rootView.findViewById(R.id.connect_toggle);
tglConnect.setChecked(StateSingleton.getInstance().getTglConnectState());
tglConnect.playSoundEffect(SoundEffectConstants.CLICK);
userDatabaseAdapter = new UserDatabaseAdapter(getActivity());
data = userDatabaseAdapter.getFragmentData(InfoSingleton.getInstance().getUserName());
mToolbar = (Toolbar) getActivity().findViewById(R.id.toolbar_actionbar);
//if (data.get(userDatabaseAdapter.ACCESS_NAME) == 1)
// LLBaudRate.setVisibility(View.VISIBLE);
//
int ersterInteger = (int) data.get(UserDatabaseAdapter.ACCESS_NAME);
if (ersterInteger == 1)
LLBaudRate.setVisibility(View.VISIBLE);
最后一个 if(现在已注释)是我得到错误的地方:
data.get(userDatabaseAdapter.ACCESS_NAME) == 1
来自 Android Studio 的提示是:
通过实例引用访问的静态成员“z550583.com.sql.UserDatabaseAdapter.ACCESS_NAME”。通过类实例而不是类本身显示对静态方法和字段的引用。
但同样的提示也出现在旧版 Android Studio 中。所以我不确定这是否是唯一的问题。
【问题讨论】:
您的代码中有错误,请分享您遇到错误的文件,如上述错误的ConnectFragment.java
。
您可以重新安装应用程序吗?卸载旧版本?
我用代码@AshishRanjan 添加了一个答案!但我应该使用新版本
您可以将代码添加到问题本身,而不是将其作为答案发布。
【参考方案1】:
错误说,你的 data
是一个 HashMap
和 HashMap
的 get
方法返回一个 Object
如果你没有定义 value
的类型,所以你需要将值解析为int
,然后将其与1
进行比较。
你可以这样做:
int yourInteger= (int)data.get(userDatabaseAdapter.ACCESS_NAME);
if(yourInteger == 1)
//do something
或
您可以定义值的类型。如果您将类型定义为V
,则get
方法将返回V
类型的对象,如here 所述。
因此,在您的情况下,您可以使用这样的泛型在您的HashMap
中定义key
和value
的对象类型:
HashMap<String,Integer> data;
而不是:
HashMap data;
【讨论】:
你是对的,谢谢!这绝对是一个问题。但是..它怎么可能在他的 AS 版本中起作用,而在我的版本中不起作用?!?!我没有更改代码,所以它完全一样,在他的情况下它可以工作,并且该应用程序可以在 Android 设备上完美运行。但就我而言,我无法将其上传到设备上!问题出在哪里? 那是因为您将JDK版本从1.7更改为1.8,并且在1.7中没有抛出任何此类错误,请尝试切换回1.7,它会起作用,只是在我的电脑上尝试过。 这是同一问题的答案:***.com/questions/23155907/…以上是关于Android Studio 中的 Gradle 构建问题的主要内容,如果未能解决你的问题,请参考以下文章
React Native:build.gradle 文件中的 Android Gradle Plugin 和 Android Studio 有啥区别?
Gradle,Gradle 包装器在 Android Studio 中的不同实例 by ionic cordova
Android Gradle 插件Gradle 构建机制 ⑤ ( 在 Android Studio 中查看 Android Gradle 插件源码 )