GVKun编程网logo

android项目从Eclipse迁移到Android studio中常见问题解决方法(eclipse安卓项目导入安卓studio)

8

关于android项目从Eclipse迁移到Androidstudio中常见问题解决方法和eclipse安卓项目导入安卓studio的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于5分钟将

关于android项目从Eclipse迁移到Android studio中常见问题解决方法eclipse安卓项目导入安卓studio的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于5分钟将OSC Android源码从Eclipse项目转化为Android studio项目、Android Studio – 使用依赖于另一个Android库的Android库构建Android项目、Android studio 使用心得 (三)--- 从 Eclipse 迁移到 Android studio、android studio 导入 eclipse 项目的问题等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

android项目从Eclipse迁移到Android studio中常见问题解决方法(eclipse安卓项目导入安卓studio)

android项目从Eclipse迁移到Android studio中常见问题解决方法(eclipse安卓项目导入安卓studio)

(1)将Eclipse项目导入到Android studio 中出现9-patch image问题解决方法:

在build.gradle里添加以下两句:

aaptOptions.cruncherEnabled = false   
aaptOptions.useNewCruncher = false

用来关闭Android Studio的PNG合法性检查的,直接不让它检查。

(2)Android Studio 错误: 非法字符: ‘\ufeff' 解决方案|错误: 需要class,interface或enum

原因:

Eclipse可以智能的把UTF-8+BOM文件转为普通的UTF-8文件,Android Studio还没有这个功能,所以使用Android Studio编译UTF-8+BOM编码的文件时会出现” 非法字符: ‘\ufeff' “之类的错误

解决方法:

手动将UTF-8+BOM编码的文件转为普通的UTF-8文件

用EdItPlus打开.java文件依次:文档》文本编辑》转换文本编码》选择UTF-8编码即可

(3)将项目导入到AS中出现以下问题:

Error:Execution Failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.bui

解决方法:

在build.grade中添加以下代码:

android{ 
packagingOptions { 
exclude ‘meta-inf/DEPENDENCIES.txt' 
exclude ‘meta-inf/NOTICE' 
exclude ‘meta-inf/NOTICE.txt' 
exclude ‘meta-inf/LICENSE' 
exclude ‘meta-inf/LICENSE.txt' 
} 
}

(4)未知错误

Error:Timeout waiting to lock cp_proj class cache for build file '/Users/Mr.xiao/Desktop/AndroidShopNC2014MoblieNew/androidShopNC2014Moblie/build.gradle' 
(/Users/Mr.xiao/.gradle/caches/2.10/scripts/build_3cyr7hzjurcc62ge3ixidshos/cp_proj).
It is currently in use by another Gradle instance.
Owner PID: unkNown
Our PID: 1412
Owner Operation: unkNown
Our operation: Initialize cache
Lock file: /Users/Mr.xiao/.gradle/caches/2.10/scripts/build_3cyr7hzjurcc62ge3ixidshos/cp_proj/cache.properties.lock

以上是错误提示。

解决方案

解决的思路很简单只需要把cache.properties.lock文件删除了就可以了。当时我们删除的时候会被占用这时候需要进入任务管理器结束关于java的进程就行比如 java 的jdk 删除后重启让java jdk启动 启动Android Studio就能启动APK了。

(5)修改了Android项目的最小SDK版本之后出现很多stysle文件找不到

解决方案

compileSdkVersion 23 
buildToolsversion “23.0.3” 
defaultConfig { 
applicationId “net.mmloo2014.android” 
minSdkVersion 14 
targetSdkVersion 23 
}

compileSdkVersion 是多少版本的那么compile ‘com.android.support:appcompat-v7:23.2.1' 就是啥版本的。

(6)Android studio 编译问题:finished with non-zero exit value 2

问题:

Error:Execution Failed for task ‘:androidShopNC2014Moblie:transformClassesWithDexForDebug'. 

com.android.build.api.transform.TransformException: 
com.android.ide.common.process.ProcessException: 
java.util.concurrent.ExecutionException: 
com.android.ide.common.process.ProcessException: 
org.gradle.process.internal.ExecException: 
Process ‘command ‘/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java” finished with non-zero exit value 2

解决方案

这个错误在app的build.gradle里面添加下面这句就好了。

android { 
defaultConfig { 
multiDexEnabled true 
} 
}

(7)Android studio 编译问题:finished with non-zero exit value 1(由于导入的依赖出现重复造成的)

问题:

Error:Execution Failed for task ‘:app:transformClassesWithDexForDebug'.

com.Android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘F:\Program Files (x86)[Java](http://lib.csdn.net/base/17)\jdk1.8.0_31\bin\java.exe” finished with non-zero exit value 1

解决方案

这个是因为依赖包重复了 (像v4和nineoldandroids),app中实现了对easeUI的依赖,但是app和easeUI都添加了对这个包的依赖。所以就报这个错误,修改之后再报,就clean,rebuild一下。

(8)问题

Error:Execution Failed for task 
':app:transformClassesWithJarMergingForDebug'.> 
com.android.build.api.transform.TransformException: 
java.util.zip.ZipException:
 duplicate entry: org/apache/http/ConnectionClosedException.class

解决方案

这个是在我们启动的时候报错的,而不是在编译的时候,原因是这样的,报这个错是因为有2个库中存在相同的类。大家可以看到stackoverflow上有人也提了这样的问题。只需要删除其中的一个就可以解决了。

(9)添加第三方依赖出现的问题

Error:Execution Failed for task ':app:processDebugManifest'.
> 
Manifest merger Failed :
 uses-sdk:minSdkVersion 14 cannot be smaller than version 19 declared in library [com.github.meikoz:basic:2.0.3] 
/AndroidStudioCode/EnjoyLife/app/build/intermediates/exploded-aar/
com.github.meikoz/basic/2.0.3/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="com.android.core" to force usage

错误原因

出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为14,而第三方库的最低支持版本为19,所以抛出了这个异常。

解决方案

AndroidManifest.xml文件中标签中添加

<uses-sdk tools:overrideLibrary="xxx.xxx.xxx"/>

其中的xxx.xxx.xxx为第三方库包名,如果存在多个库有此异常,则用逗号分割它们,例如:

<uses-sdk tools:overrideLibrary="xxx.xxx.aaa,xxx.xxx.bbb"/>

这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制。

(10)Android studio 编译问题:finished with non-zero exit value 1(由于buildtools版本太高造成的)

错误

Error:Execution Failed for task ‘:app:transformClassesWithDexForDebug'.

com.android.ide.common.process.ProcessException: 
org.gradle.process.internal.ExecException: 
Process ‘command ‘/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java” finished with non-zero exit value 1

错误原因

 
buildToolsversion版本太高,我原来的 buildToolsversion “24.0.0” 需要jdk1.8,而我的是jdk1.7,所以一直报这个错,刚开始以为是v4包和V7包冲突,因为之前遇到这样的问题,而这次删除V4包之后依然报这个错,把buildTools版本降下来就好了。

解决方案

android { 
compileSdkVersion 23 
buildToolsversion “23.0.3” 
}

(11)Android studio 编译问题:Gradle DSL not found ‘android()'

问题

clipboard.png

解决方案

配置build.gradle:

buildscript { 
repositories { jcenter()} 
dependencies { 
classpath ‘com.android.tools.build:gradle:2.1.2' 
} 
} 
allprojects { 
repositories { 
jcenter() 
} 
}

配置app/build.gradle:

apply plugin: ‘com.android.application' 
android { 
… 
defaultConfig { …} 
} 
dependencies { …}

最后再同步一下sync即可。

(13)Glide使用问题:使用Glide加载圆角图片,第一次显示占位图

问题描述

最近在项目中使用Glide加载圆形图片,并且设置placehloder和error两个占位图,运行发现,第一次加载图片只显示占位图,需要第二次进入的时候才会正常显示。

如果你刚好使用了这个圆形Imageview库或者其他的一些自定义的圆形Imageview,而你又刚好设置了占位的话,那么,你就会遇到第一个问题。如何解决呢?

方案一

不设置占位图 推荐

/** 
* 显示圆形图片 
* @param context 
* @param url 
* @param iv 
*/ 
public static void loadCircleImage(final Context context,String url,final ImageView iv) {

  Glide.with(context).load(url).asBitmap().centerCrop()
      .placeholder(R.mipmap.default_user_icon)
      .error(R.mipmap.default_user_icon)
      .diskCacheStrategy(diskCacheStrategy.RESULT)
      .into(new BitmapImageViewTarget(iv) {
    @Override
    protected void setResource(Bitmap resource) {
      RoundedBitmapDrawable circularBitmapDrawable =
          RoundedBitmapDrawableFactory.create(context.getResources(),resource);
      circularBitmapDrawable.setCircular(true);
      iv.setimageDrawable(circularBitmapDrawable);
    }
  });

方案二

使用Glide的Transformation API自定义圆形Bitmap的转换

/** 
* Glide圆形图片处理 
*/ 
static class CircleTransform extends BitmapTransformation { 
public CircleTransform(Context context) { 
super(context); 
}

  @Override
  protected Bitmap transform(BitmapPool pool,Bitmap toTransform,int outWidth,int outHeight) {
    return circleCrop(pool,toTransform);
  }

  private static Bitmap circleCrop(BitmapPool pool,Bitmap source) {
    if (source == null) return null;

    int size = Math.min(source.getWidth(),source.getHeight());
    int x = (source.getWidth() - size) / 2;
    int y = (source.getHeight() - size) / 2;

    Bitmap squared = Bitmap.createBitmap(source,x,y,size,size);

    Bitmap result = pool.get(size,Bitmap.Config.RGB_565);
    if (result == null) {
      result = Bitmap.createBitmap(size,Bitmap.Config.ARGB_8888);
    }

    Canvas canvas = new Canvas(result);
    Paint paint = new Paint();
    paint.setShader(new BitmapShader(squared,BitmapShader.TileMode.CLAMP,BitmapShader.TileMode.CLAMP));
    paint.setAntiAlias(true);
    float r = size / 2f;
    canvas.drawCircle(r,r,paint);
    return result;
  }

  @Override
  public String getId() {
    return getClass().getName();
  }
}

使用方法:

Glide.with(context).load(imageUrl).placeholder(placeholder).error(errorImage).transform(new CircleTransform(context)).into(imageView);

方案三

重写Glide的图片加载监听方法,具体如下:

Glide.with(mContext) 
.load(url) 
.placeholder(R.drawable.loading_drawable) 
.into(new SimpleTarget<Bitmap>(width,height) {
 @Override public void onResourceReady(Bitmap bitmap,GlideAnimation anim) { 
// setimageBitmap(bitmap) on CircleImageView 
} 
});

注意事项:

该方法在listview上复用有问题的bug,如果在listview中加载CircleImageView,请不要使用该方法。

方案四:不使用Glide的默认动画:

Glide.with(mContext)
  .load(url) 
  .dontAnimate()
  .placeholder(R.drawable.loading_drawable)
  .into(circleImageview);

(14)json数据解析问题:json串头部出现字符:”\ufeff” 解决方法

异常信息

org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject

解析服务器返回 的json格式数据时,我们可能会发现,数据格式上是没有问题的,但是仔细对比会发现,在json串头部发现字符:”\ufeff”

客户端解决方案:

/** 
* 异常信息:org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject 
* json串头部出现字符:"\ufeff" 解决方法
* @param data 
* @return 
*/
public static final String removeBOM(String data) {  
if (TextUtils.isEmpty(data)) {    
     return data;  
}  
if (data.startsWith("\ufeff")) {    
    return data.substring(1);  
    } 
else {    
    return data;  
    }
}

服务器端解决方案:

将输出此json的PHP源码重新用editplus之类用utf-8无BOM的编码保存。不要用windows系统自带的记事本编辑PHP源码,这个BOM就是记事本这些windows自带的编辑器引入的。

(15)Android studio编译问题:not found ndk()

问题

Error:(15,0) Gradle DSL method not found: 'ndk()' method-not-found-ndk

解决方案

出现该问题,可能是由于ndk配置在build.gradle配置文件中位置弄错导致的

apply plugin: 'com.android.application'
android {
  compileSdkVersion 23
  buildToolsversion "23.0.2"

  defaultConfig {
    applicationId "com.guitarv.www.ndktest"
    minSdkVersion 17
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    ndk {
      moduleName = "HelloJNI"
    }
    sourceSets.main {
      jni.srcDirs = []
      jniLibs.srcDir "src/main/libs"
    }
  }
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
    }
  }
}

(16)Android studio导入其他的项目:UnsupportedMethodException

问题

UnsupportedMethodException
    Unsupported method: AndroidProject.getPluginGeneration().
    The version of Gradle you connect to does not support that method.
    To resolve the problem you can change/upgrade the target version of Gradle you connect to.
    Alternatively,you can ignore this exception and read other information from the model.

解决方案

将根目录中的build.gradle文件中的gradle版本号,出现错误之前,我的是1.3.0,修改成2.2.0之后重新编译一下就可以运行了。

dependencies {  
classpath 'com.android.tools.build:gradle:1.3.0'  
}

将这个版本号改成你其他项目能够运行成功的版本号即可

(17)Android studio更新到2.1.1之后使用CollapsingToolbarLayout出现Error inflating class CollapsingToolbarLayout

之前在项目中使用了CollapsingToolbarLayout,效果还是可以的,但是Android stuido更新到2.1.1版本之后出现Error inflating class CollapsingToolbarLayout 异常崩溃

异常信息如下所示:

com.test.android/com.test.android.ui.activity.RandomActivity}: android.view.InflateException: Binary XML file line #22: Error inflating class android.support.design.widget.CollapsingToolbarLayout
。。。
Caused by: java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat; or its super classes (declaration of 'android.support.v4.graphics.drawable.DrawableCompat' appears in /data/app/com.test.android-1/base.apk)
。。。

解决方案

在项目的build.gradle文件中添加下面一行,同步一下即可

compile ('com.android.support:support-v4:23.4.0'){
  force = true;
}

(18)Android studio gradle编译异常

java.lang.UnsupportedClassversionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

很显然是class版本不支持。经查询,Android Studio2.2必须使用JDK8及以上版本,而且是强制的。

所以呢,赶紧下了个JDK8最新版的。安装完毕,把JAVA_HOME指向了JDK8,实测JDK7和8是可以共存的。

那么,重启Android Studio后问题解决,Build Successful !

(19)recycleview嵌套列表项显示不全问题

解决方案:

第一个RecyclerView的Adapter(即父RecyclerView):

@Override 
  public MyHolder onCreateViewHolder(ViewGroup parent,int viewType) { 
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.shop_item,null); 解决条目显示不全 
        MyHolder holder = new MyHolder(view); 
          return holder; 
   } 

第二个RecyclerView的Adapter(即子RecyclerView):

@Override 
public MyHolder onCreateViewHolder(ViewGroup parent,int viewType) { 
  View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.check_item,parent,false);//解决宽度不能铺满 
  MyHolder holder = new MyHolder(view); 
   return holder; 
  } 

(20)Android手机真机调试,日志不打印的解决方案:

1、在拨号界面输入:*#*#2846579#*#* 进入测试菜单界面。
2、Project MenuC后台设置CLOG设置
3、LOG开关CLOG打开 LOG级别设置CVERBOSE
4、Dump&LogC 全部选中
5、重启手机

(21)java.lang.indexoutofboundsexception Inconsistency detected. Invalid item position 2(offset:2).state:4

解决方案:

Recyclerview在下拉刷新时,如果在数据没更新到之前将list clear 之后,迅速滑动会造成crash,所以一般在下拉刷新之前,等数据刷新回来再把之前的数据进行清除。

(22)使用友盟分享――微信、朋友圈分享出现java.lang.NoClassDefFoundError: org.apache.http.entity.mime.multipartentity

解决方案: 造成这样的原因是因为缺少httpmime_jar,添加是httpmime_jar包之后即可正常分享

(23)Fragment中调用getActivity()出现空指针异常

解决方案:

 对于上面的问题,可以考虑下面这两种解决办法:
  1、不保存fragment的状态:在MyActivity中重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到fragment随MyActivity一起销毁的目的。

  2、重建时清除已经保存的fragment的状态:在恢复Fragment之前把Bundle里面的fragment状态数据给清除。方法如下:

if(savedInstanceState!= null)
{
String FRAGMENTS_TAG = "android:support:fragments";
savedInstanceState.remove(FRAGMENTS_TAG);
}

(24)RecyclerView嵌套使用切换页面出现自动滚动问题

原因:

造成这样的原因是由于子RecyclerView抢占焦点导致的,如果你去查看RecyclerView的源码会发现,它会在构造方法中调用setFocusableInTouchMode(true),所以,设为false可以解决这个问题。

解决方案

在子RecyclerView中调用如下方法

//设置焦点不需要
secondRvList.setFocusableInTouchMode(false);
secondRvList.requestFocus();

(25)Android 7.0设备拍照闪退问题

原因:

Android 7.0 做了一些系统权限更改,为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问,此设置可防止私有文件的元数据泄漏,如它们的大小或存在性。而此权限更改有多重副作用,其中之一就是当传递软件包网域外的 file:// URI 可能给接收器留下无法访问的路径。因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider。在应用间共享文件对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。要在应用间共享文件,应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。点击查看Android官方说明

解决方案

1.在清单文件添加如下代码

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="你的应用包名.fileProvider"
android:exported="false"
android:grantUriPermissions="true">

<Meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>

</provider>

android:authorities="com.alex.demo.FileProvider" 自定义的权限 

android:exported="false" 是否设置为独立进程 

android:grantUriPermissions="true" 是否拥有共享文件的临时权限 

android:resource="@xml/external_storage_root" 共享文件的文件根目录,名字可以自定义 

2.在xml文件夹目录下新建provider_paths文件,名字自定义,添加如下代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <paths>
    <external-path
      name="camera_photos"
      path="" />
  </paths>
</resources>

3.调用系统相机处代码处理

 

//调用系统相机拍照
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,parUri(tempFile));
 startActivityForResult(cameraIntent,REQUEST_CAMERA);
}

 /**
  * 生成uri
  * @param cameraFile
  * @return
  */
  private Uri parUri(File cameraFile) {
    Uri imageUri;
    String authority = getContext().getPackageName()+ ".provider";
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      //通过FileProvider创建一个content类型的Uri
      imageUri = FileProvider.getUriForFile(getContext(),authority,cameraFile);
    } else {
      imageUri = Uri.fromFile(cameraFile);
    }
    return imageUri;
  }

(26)ProcessException: Return code 1 for dex process

问题实际原因还是Apps over 64k method,

解决方案:

https://developer.Android.com/intl/zh-cn/tools/building/multidex.html

方案1:使用插件化框架 比如: https://github.com/singwhatiwanna/dynamic-load-apk

方案2:分割Dex

主要说说Dex分割

1、开发环境是eclipse时的解决方案:

在project.properties中添加一行 dex.disable.merger = true

2、Android Studio在app的 build.gradle 中

(1)在dependencies 中添加  compile ‘com.android.support:multidex:1.0.1‘

(2)在 defaultConfig 中添加multiDexEnabled true

android { 
  compileSdkVersion 21 
  buildToolsversion "21.1.0" 
  defaultConfig { 
    ... 
    minSdkVersion 14 
    targetSdkVersion 21 
    ... 
    // Enabling multidex support. 
    multiDexEnabled true 
  } 
  ... 
} 
dependencies { 
 compile 'com.android.support:multidex:1.0.1' 
}

(3) 如果你的应用程序继承 Application,那么你需要重写并继承 MultiDexApplication. 并添加以下代码。(晕,不添加也可以???)

/** * 分割 Dex 支持 * @param base */
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

当没有继承Application 时,

manifest application 标签中添加

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.vieboo.test">
   <application
    ...
     android:name="android.support.multidex.MultiDexApplication">
    ...
  </application>
</manifest>

(27)依赖库属性冲突
gradle.properties加上android.enableAapt2=false可解决

您可能感兴趣的文章:

  • Eclipse NDK迁移到Android Studio的方法示例
  • 在启动栏制作android studio启动图标
  • 深踩Android Studio 缓存的坑及解决方法
  • Android Studio 3.0 Gradle 配置变更
  • Android Studio设置、改变字体和主题的方法
  • 使用Android studio编写一个小的jni程序
  • Android Studio 代码导航快捷键
  • Android Studio多工程引用同一个library项目配置的解决方法
  • Android Studio中Run按钮是灰色的快速解决方法
  • Android Studio 下载视频到本地
  • 详解Android Studio中Git的配置及协同开发
  • Android Studio配置内嵌JDK的方法
  • AndroidStudio 配置 AspectJ 环境实现AOP的方法
  • 详解如何在Android Studio中添加RecyclerView-v7支持包
  • Android Studio 一个工程打包多个不同包名的APK实例详解
  • android studio library 模块中正确引用aar的实例讲解
  • Android Studio中导入module的方法(简单版)
  • Android Studio 引用外部依赖时报错的解决方法

5分钟将OSC Android源码从Eclipse项目转化为Android studio项目

5分钟将OSC Android源码从Eclipse项目转化为Android studio项目

OSC的Android客户端源码也开源很久了,一直想下载下来看看的奈何最近比较忙直到今天终于有时间clone下来研究研究了。

OSC的Android客户端项目使用的是Eclipse进行开发的,因为我现在的开发环境都是在Android studio下进行的,所以准备把OSC的项目转化为Android studio的项目。其实转化起来很简单的,之前也将自己很多的Eclipse的项目转化过Android studio项目。手动添加几个gradle文件分分钟就搞定了,OK下面开始转化。

从git.oschina.net clone下来的目录是这样的:

首先将libraries目录下的library项目拷出来放到osc-android-app同级目录下(注:因为 Android-ViewPagerIndicator-master项目的代码还在里面一层的 library目录下,所以将 library目录下的文件拷到Android-ViewPagerIndicator-master目录下)。

首先在osc-android-app同级目录也就是项目的根目录添加settings.gradle和build.gradle文件

settings.gradle:

include '':osc-adnroid-app'','':Android-ViewPagerIndicator-master'', '':PhotoView-library'', '':UmengShareLib'',":osc-android-app-appcompat-v7"

build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        //这里替换为你自己的gradle版本
        classpath ''com.android.tools.build:gradle:1.0.0''
    }
}

再为每个library项目下添加一个build.gradle文件:

build.gradle:

apply plugin: ''android-library''

dependencies {
    compile fileTree(dir: ''libs'', include: ''*.jar'')
}

android {
    compileSdkVersion 19
    //替换为当前已有的build tools版本
    buildToolsVersion "21.1.2"

    sourceSets {
        main {
            manifest.srcFile ''AndroidManifest.xml''
            java.srcDirs = [''src'']
            resources.srcDirs = [''src'']
            aidl.srcDirs = [''src'']
            renderscript.srcDirs = [''src'']
            res.srcDirs = [''res'']
            assets.srcDirs = [''assets'']
            jniLibs.srcDirs = [''libs'']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot(''tests'')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot(''build-types/debug'')
        release.setRoot(''build-types/release'')
    }
}

然后为osc-android-app主项目添加一个build.gradle:

apply plugin: ''android''

dependencies {
    compile fileTree(dir: ''libs'', include: ''*.jar'')
    compile project('':Android-ViewPagerIndicator-master'')
    compile project('':PhotoView-library'')
    compile project('':UmengShareLib'')
    compile project('':osc-android-app-appcompat-v7'')
}

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.2"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile ''AndroidManifest.xml''
            java.srcDirs = [''src'']
            resources.srcDirs = [''src'']
            aidl.srcDirs = [''src'']
            renderscript.srcDirs = [''src'']
            res.srcDirs = [''res'']
            assets.srcDirs = [''assets'']
            jniLibs.srcDirs = [''libs'']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot(''tests'')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot(''build-types/debug'')
        release.setRoot(''build-types/release'')
    }


}

OK,差不多已经完成了。

打开Android studio-->File-->Open 选中项目根目录我们创建的build.gradle点击OK打开我们的项目。

项目编译的时候会报几个错误:

1、主项目的资源文件colors文件里有重复定义的颜色名称white和blue。解决办法:将white删除一个,将日历的blue修改个名称,然后将使用的地方\res\color\date_picker_selector.xml改一下

2、welcome.png不是png文件,虽然文件后缀是png但是其实不是标准png图片,Android studio检测比较严格 解决办法:将welcome.png用图片编辑器打开然后另存为png图片即可

3、在AndroidManifest.xml里的最后提示找不到最后两个activity

<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:launchMode="singleTask"
    android:noHistory="true" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="tencent100942993" />
    </intent-filter>
</activity>

<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

这个应该是QQ分享或者授权的activity,不知道为啥报错,暂且将它先注释掉吧。

将上述几个问题修改以后然后rebuild一下,编译正常后,点击运行就能正常的运行了。

亲测能正常运行

Android Studio – 使用依赖于另一个Android库的Android库构建Android项目

Android Studio – 使用依赖于另一个Android库的Android库构建Android项目

我需要使用Gradle构建一个依赖于Android库项目A的Android项目,该项目取决于另一个Android库项目B.

到目前为止,我有以下内容:

Android项目:

的build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android'

dependencies {
    compile project(':LibA')
}

android {
    compileSdkVersion 7
    buildToolsversion "17.0.0"
}

manifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cyborg.template"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="7" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.cyborg.template.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Android库A:

的build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android-library'

dependencies {
    compile project(':LibB')
}


android {
    compileSdkVersion 7
    buildToolsversion "17.0.0"
} 

manifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.lib.project.a"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk
            android:minSdkVersion="7"
            android:targetSdkVersion="7"/>

</manifest>

Android库B:

的build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 7
    buildToolsversion "17.0.0"
} 

manifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.lib.project.b"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk
            android:minSdkVersion="7"
            android:targetSdkVersion="7"/>

</manifest>

在尝试构建Android项目时,Android studio报告了以下错误:

Gradle: Execution Failed for task ':LibA:processDebugManifest'.
  > Manifest merging Failed. See console for more info.

那个控制台在哪里我想搜索有关错误的更多信息?

我发现了一些关于这个错误的问题,但它似乎与我的情况不一样.

启示?

谢谢,
亚当.

解决方法:

该库的清单文件当前必须具有< application />节点,即使它是空的.

这是我们将在某些时候删除的限制,但现在,只需添加它.

Android studio 使用心得 (三)--- 从 Eclipse 迁移到 Android studio

Android studio 使用心得 (三)--- 从 Eclipse 迁移到 Android studio

  断断续续的也算是把 eclipse 上的代码成功迁移到 android studio 上来了,现在,我同事继续用 eclipse,我用 android studio,svn 上还是之前 eclipse 的项目,迁移成功后,我也能 happy 的开发了,两不误。直接来分享我捉摸的一点小成果吧

 以 Demo4 为例,并引用了 library 包 appcompat_v7_8.

 1, 第一步,Eclipse 还是要有滴,并且 adt 得在 22 以上,我相信大家 adt 肯定在 22 以上了吧,不然还开发个毛。

   (1) 在 Eclipse 中,选择 Flie->Export-->Android-->Generate Gradle build files

(2),next--> 选中自己要导的项目 -->next--> 先只勾选 Force overriding of exeisting files-->finish--->finish

(3). 各位,注意啦,有东西要改啦,先在 eclipse 项目里面去瞧瞧项目,增加了一个文件 build.gradle, 然后直接在这里面改点东西。

改什么东西本呢,先上我改完后的图。高清无码大图,好戏在后头

a, 把 apply plugin: ''android''  改成 apply plugin: ''com.android.application'' 因为,apply plugin: ''android'' 已经不适合现在的版本啦

b, 加一段代码,相信我,加上去就行,亲测

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath ''com.android.tools.build:gradle:1.0.0''

    }
}

c, 把 buildToolsVersion "19.1.0" 改成  buildToolsVersion "21.0.2"。注意啦,别看我这是 21.0.2, 你得看你自己 sdk 里面的版本,如图

ok! ctrl+s 保存刚刚改的东西,eclipse 我们可以暂时不用看啦,

2,第二步,,我们找到 eclipse 的工作空间,就是你项目放代码的要目录。嘿嘿,会发现多了几个文件。如图

我们要改两个东西,相信我,绝对要改,不改就被坑,

(1) 第一个是 build.gradle, 如果你的是 0.8.+,就改成 1.0.0   还是版本问题

(2). 第二个一定要改,gradle\wrapper 这个目录里面的 gradle-wrapper.properties 文件,默认是在线加载,在天朝去谷歌下载,你懂的。所以我们要改成加载本地的。你本地得先有这个东西啊 gradle-2.2.1-all. 如果没有就去 () 下载

链接: http://pan.baidu.com/s/1bnxYzmv 密码: nd2l

 

好啦,好戏来啦,android studio 终于可以上场啦。

3, 第三步,打开 android studio, 选择 import Non-Android studio project --> 选择项目 Demo4 里面的 build.gradle 文件,别选错,点击 ok. 可能弹出提示框,直接 ok 就行。然后就等待它创建项目吧。哈哈哈

ok 后,下面如果出现这个错,那就说明没问题啦。这一看就知道,我们没有导入 libray 包啦。有两种试,一种就是回到 eclipse,跟之前一样利用 eclipse 生成 build.gradle 文件,但是这样比较麻烦,另外一种就是直接在 android studio 里面导.(如果嫌麻烦的,建议直接用这种方式引入 Android studio 使用心得 (七)--- 如何导入 library 工程包).

如果不嫌麻烦的,就继续跟我往下走

 回来 eclipse, 选择要引入的包 appcompat_v7_8,和之前 Demo4 一样,生成 build.gradle 文件。然后再回到 android studio. 导入,File-->import module-->appcompat_v7_v8-->ok  (ps: 这里直接选择项目就行,不要再去选择里面的 build.gradle 文件) 注意啦,反正我这么干,很爽,上图 --- 如果还引用了其它的 library 包,同样的操作,爽。

4,最后再稍微配置下就 ok 啦。就是你原来引用了几个 library 包,你就要检查一个地方是否有没配置

dependencies {
    compile fileTree(dir: ''libs'', include: ''*.jar'')
    compile project('':appcompat_v7_8'')
}

(ps: 如果你之前项目有加载.so 文件,比如说用到了地图 sdk,推送 sdk,这些里面有.so 文件,光 compilefileTree (dir:''libs'',include:''*.jar'') 没用的,还需要配置一下才能加载.so 文件。大家可以看这篇文章的介绍 Android studio 使用心得 (六)---android studio 如何加载.so 文件)

解读一下, compile fileTree (dir: ''libs'', include: ''*.jar'') 这一行,会把你之前 eclipse 里面的 lib 文件夹里面的.jar 包都引进来,所以你不用管了,  compile project ('''') 就是你 import module 的 library 包,你每导一个进来,在

settings.gradle 这里面都会有,直接把 include 后面的 copy 过去,因为,怕你手动敲敲错,导致报错。

5. 大功造成,run! Hello world! 来了。。。

 

好啦。。。同事们都午睡了,我也不敲得键盘响了。。睡觉。。。希望这篇文章能帮助到大家。大家迁移代码的时候,有什么问题也可以说出来大家一起讨论一下,相互学习,解决问题。

下一篇,我为大家分享一下 android studio 多渠道打包,必备良药.

android studio 导入 eclipse 项目的问题

android studio 导入 eclipse 项目的问题

现在在 eclipse 中 有一个 android 项目 a 还有一个被 a 引用的 package(包) b。现在想转移到 studio 中  直接导入 eclipse 项目是报错的 。按照网上的当时导入也是报错。没弄个 android,求帮忙

关于android项目从Eclipse迁移到Android studio中常见问题解决方法eclipse安卓项目导入安卓studio的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于5分钟将OSC Android源码从Eclipse项目转化为Android studio项目、Android Studio – 使用依赖于另一个Android库的Android库构建Android项目、Android studio 使用心得 (三)--- 从 Eclipse 迁移到 Android studio、android studio 导入 eclipse 项目的问题等相关内容,可以在本站寻找。

本文标签: