中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android項目從Eclipse遷移到Android studio中常見問題解決方法

發布時間:2020-10-06 21:14:49 來源:腳本之家 閱讀:339 作者:wdc 欄目:移動開發

(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, size, Bitmap.Config.RGB_565);
    if (result == null) {
      result = Bitmap.createBitmap(size, 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, 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 Menu–后臺設置–LOG設置
3、LOG開關–LOG打開 LOG級別設置–VERBOSE
4、Dump&Log– 全部選中
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可解決

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐庐县| 淮南市| 勃利县| 潼南县| 邛崃市| 邹城市| 云龙县| 京山县| 瓦房店市| 轮台县| 渭南市| 太湖县| 格尔木市| 监利县| 孙吴县| 岳阳县| 冀州市| 井研县| 酉阳| 吉林省| 齐齐哈尔市| 临夏县| 克什克腾旗| 东乡族自治县| 合川市| 怀集县| 弥渡县| 始兴县| 英山县| 巴东县| 凤城市| 乌拉特前旗| 南城县| 肇东市| 米泉市| 牙克石市| 方正县| 图片| 阳春市| 阿鲁科尔沁旗| 高淳县|