Android问题集锦之四十六
最后更新于:2022-04-01 06:39:42
## 改包名后出现Error type 3
背景:
为了和使用Eclipse的同学并行工作了,我将原Eclipse的项目中加入build.gradle,内容如下:
~~~
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
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')
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
lintOptions {
abortOnError false
}
buildTypes {
debug {
debuggable true
signingConfig signingConfigs.debug
}
release {
debuggable false
signingConfig signingConfigs.debug
minifyEnabled true
proguardFiles 'proguard-project.txt'
}
}
}
~~~
一直很好的工作着,直到今天我心血来潮将项目的包名在manifest中修改了,也在各个文件中修改了此包名。编译通过,但是运行时报错:
~~~
Launching application: com.foo.app/com.foo.app.main.
DEVICE SHELL COMMAND: am start -n "com.foo.app/com.foo.app.main"
Starting: Intent { cmp=com.foo.app/.main}
Error type 3
Error: Activity class {com.foo.app/com.foo.app.main} does not exist.
~~~
这真是见鬼了,我clean build,并将代码目录下的bin也都删掉了。重启Android Studio,还是有问题。我也将app从手机中卸载再调试,等等等等。尝试了很多办法。stackoverflow那篇帖子上的方法也尝试了许多。
当然,我知道新建一个项目并将此项目中的文件拷过去,一定能够运行。但我不想这么做。
最后,还是参考网友,将build.gradle中android下加入applicationId为新包名,解决了这个问题。
~~~
defaultConfig {
applicationId "com.yourpackage.yourapplication"
}
~~~
> 参考:
> [http://stackoverflow.com/questions/7071271/activity-class-does-not-exist](http://stackoverflow.com/questions/7071271/activity-class-does-not-exist)
Android问题集锦之四十五
最后更新于:2022-04-01 06:39:40
## undefined reference to 'srand'
ndk 10b~10e在编译使用C随机数函数srand和rand时没有问题,
可是程序运行时就报类似下面的错误:
~~~
error: undefined reference to 'srand'
error: undefined reference to 'rand'
~~~
这让我百思不得其解。
我先后做了如下尝试:
1、有网友说我的ndk版本太低了,要用高一些的。
我就将原来使用的10b换成了10e,结果还是不行。
2、有网友说要将交叉编译器换成高版本的,我更新了,结果还是不行。
3、有网友说不要用64位的ndk,要用32位的。我又新下载了32位的10e,还是不行。
就在我崩溃的要放弃的时候,国外网友提到了stdlib.h,好像昨天就有看到这个头文件的问题。
我试着加入这个头文件,再编译运行,通过了!
这可能是bionic库做的调整吧,与原C标准库有些差异。不过既然没问题了,还是值得高兴一下!
~~~
#include "shooter.h"
#include <stdlib.h>
#include <stdio.h>
void bubble_sort(int *array,int n) {
int i,j,tmp;
for(i=0;i<n-1;i++) {
for(j=n-1;j>i;j--) {
if(array[j-1]>array[j]) {
tmp = array[j-1];
array[j-1]=array[j];
array[j]=tmp;
}
}
}
}
int A(int a) {
int n = 10;
int i;
int array[n];
srand(time(NULL));
for(i=0;i<n;i++) {
array[i] = rand()%100+1;
printf("%d, ",array[i]);
}
printf("\n");
bubble_sort(array,n);
return array[0];
}
~~~
> 参考:
> [http://stackoverflow.com/questions/27186706/spin-verification-undefined-reference-to-random-and-srandom](http://stackoverflow.com/questions/27186706/spin-verification-undefined-reference-to-random-and-srandom)
这与android不挨着,但也帮了我。
Android问题集锦之四十四
最后更新于:2022-04-01 06:39:38
## Android Studio 1.3 代理问题
关于AS的代理设置,我在之前的版本中设好了。
File—>Settings—>System Settings—>HTTP Proxy
要说明的是,我设代理并不是为了翻墙,而是公司上外网必须要用代理。
前几天发现AS有了新版本1.3,算一次重要的升级。我观望了一阵(因为每次升级都会伴随其他升级D导致一段时间我的环境不能用),决定先给台式机的AS升级。
漫长的下载安装后,重启AS,新建一个项目来体验这新的版本。AS提示我是否将gradle也设置与AS相同的代理。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-12-29_56824d3dd22b6.jpg)
我选择了yes,但是不好意思,程序卡在build界面下不走。应该是代理的问题。下一次选择的No,还是不行。姥姥的,究竟什么问题呢?
网友们给出的答案是,gradle配置中不但要有http的代理,还要有https的配置,在gradle.properties中加入
~~~
systemProp.https.proxyHost=proxy.xxx.com
systemProp.https.proxyPort=8080
systemProp.http.proxyHost=proxy.xxx.com
systemProp.http.proxyPort=8080
~~~
这样就可以啦!
> 参考:
> [http://licheedev.com/2015/06/22/gradle-proxy-for-as-1-3/](http://licheedev.com/2015/06/22/gradle-proxy-for-as-1-3/)
Android问题集锦之四十三
最后更新于:2022-04-01 06:39:35
## UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 104 cannot locate
这是我在用NDK中遇到的问题。
场景是自己写的一个so库,调用另一个适用android的so库的一个方法,也没有用什么特性,非常简单的例子,但是就是出现这个错误。
在stackoverflow上也有人遇到同样的问题,说是API-21后就会有这个问题云云。我当前的编译版本如下:
~~~
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.linc.thirdndktest"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
~~~
尝试改成19后果然好用了。
殊不知以后会是什么情况,基于目前时间紧任务重,先暂且用这个权宜之计。以后(如果有以后的话),再说!
> 参考:
> stackoverflow.com/questions/27338318/cannot-load-library-reloc-library1285-cannot-locate-rand
Android问题集锦之四十二
最后更新于:2022-04-01 06:39:33
## INSTALL_FAILED_OLDER_SDK
错误描述如下:
~~~
$ adb install ./app/build/outputs/apk/app-debug.apk
2999 KB/s (8256380 bytes in 2.688s)
pkg: /data/local/tmp/app-debug.apk
Failure [INSTALL_FAILED_OLDER_SDK]
~~~
原因就是您设备的Android版本过低,app不支持。
改正的办法就是在程序的Manifest文件(或build.gradle)中将最低版本号调高。
Manifest中:
~~~
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="17" />
~~~
build.gradle中:
~~~
defaultConfig {
applicationId "com.xxx.xxx"
minSdkVersion 15
targetSdkVersion 17
}
~~~
Android问题集锦之四十一
最后更新于:2022-04-01 06:39:31
## getActionBar为null的解决以及ActionBar的Back键
我们用getActionBar获得ActionBar实例,将其隐藏或做其他操作。
~~~
ActionBar actionBar = getActionBar();
~~~
不过我这样做了,但是actionBar是null。
问题是由Activity基类引起的,当使用AppCompatActivity或其他support包中的基类,那么获得ActionBar实例需要用另一个相应的方法,那就是getSupportActionBar(),ActionBar也要使用相应support包下的。
~~~
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
~~~
那么这样就可以ActionBar自带的back功能了。
~~~
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
~~~
~~~
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if(id == R.id.home) {//back key
Intent intent = NavUtils.getParentActivityIntent(this);
if(intent != null) {
if (NavUtils.shouldUpRecreateTask(this, intent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(intent)
.startActivities();
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);
}
} else {
Log.e(TAG,"intent is null");
}
}
return super.onOptionsItemSelected(item);
}
~~~
Android问题集锦之四十
最后更新于:2022-04-01 06:39:28
## Android NDK: Could not find application project directory
记得前阵子编译so库直接使用ndk-build搞定,今天使用却报错如下:
~~~
$ ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/opt/android-ndk-r10b/build/core/build-local.mk:148: *** Android NDK: Aborting . Stop.
~~~
高人支招如下:
~~~
You need to specify 3 things.
NDK_PROJECT_PATH - the location of your project
NDK_APPLICATION_MK - the path of the Application.mk file
APP_BUILD_SCRIPT - the path to the Android.mk file
These are needed to override the default values of the build script, which expects things to be in the jni folder.
When calling ndk-build use
ndk-build NDK_PROJECT_PATH=/path/to/proj NDK_APPLICATION_MK=/path/to/Application.mk
In Application.mk add
APP_BUILD_SCRIPT := /path/to/Android.mk
~~~
首先第一步,在Application中加入Android.mk路径
比如这两个文件是同级的:
~~~
APP_BUILD_SCRIPT := Android.mk
~~~
第二步,直接编译:
~~~
$ ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk
[armeabi-v7a] Compile++ thumb: detection_and_recognition_lib <= DetectionAndRecognition.cpp
[armeabi-v7a] Prebuilt : libopencv_java.so <= /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/../libs/armeabi-v7a/
[armeabi-v7a] SharedLibrary : libdetection_and_recognition_lib.so
/opt/android-ndk-r10b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /opt/android-ndk-r10b/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/thumb/libgnustl_static.a(atexit_arm.o) is referenced by DSO ./obj/local/armeabi-v7a/libopencv_java.so
[armeabi-v7a] Install : libdetection_and_recognition_lib.so => libs/armeabi-v7a/libdetection_and_recognition_lib.so
[armeabi-v7a] Prebuilt : libnative_camera_r4.3.0.so <= /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/../libs/armeabi-v7a/
[armeabi-v7a] Install : libnative_camera_r4.3.0.so => libs/armeabi-v7a/libnative_camera_r4.3.0.so
[armeabi-v7a] Prebuilt : libnative_camera_r4.4.0.so <= /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/../libs/armeabi-v7a/
[armeabi-v7a] Install : libnative_camera_r4.4.0.so => libs/armeabi-v7a/libnative_camera_r4.4.0.so
[armeabi-v7a] Install : libopencv_java.so => libs/armeabi-v7a/libopencv_java.so
[x86] Compile++ : detection_and_recognition_lib <= DetectionAndRecognition.cpp
[x86] Prebuilt : libopencv_java.so <= /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/../libs/x86/
[x86] SharedLibrary : libdetection_and_recognition_lib.so
[x86] Install : libdetection_and_recognition_lib.so => libs/x86/libdetection_and_recognition_lib.so
[x86] Prebuilt : libnative_camera_r4.3.0.so <= /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/../libs/x86/
[x86] Install : libnative_camera_r4.3.0.so => libs/x86/libnative_camera_r4.3.0.so
[x86] Prebuilt : libnative_camera_r4.4.0.so <= /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/../libs/x86/
[x86] Install : libnative_camera_r4.4.0.so => libs/x86/libnative_camera_r4.4.0.so
[x86] Install : libopencv_java.so => libs/x86/libopencv_java.so
~~~
各位大虾也许看出来了,我在编译OpenCV相关的项目。而现在的设备选型已经涵盖了x86架构,所以编译时要选择x86指令集编译。在Application.mk中注明如下:
~~~
APP_ABI := armeabi-v7a x86
~~~
后记:
放到jni目录下就不用此命令了!
> 参考:
> [http://stackoverflow.com/questions/14156596/ndk-cant-find-the-application-directory](http://stackoverflow.com/questions/14156596/ndk-cant-find-the-application-directory)
Android问题集锦之三十九
最后更新于:2022-04-01 06:39:26
## 使用Camera录像的常见问题
在Android5.0之前我们一直使用android.hardware.Camera做拍照和录像,然而使用的过程并不是一帆风顺的,我跟着官方Camera文档编码实验,却也遇到了各种各样的问题,下面就来分别说说。
另外,API21开始推荐使用android.hardware.Camera2这个包了。
一、权限问题
使用Camera需要有camera的权限,录像时需要有录制音频的权限,保存相片和视频时需要有操作sdcard的权限。否则,因为权限问题就会报错。有些报错会显示告诉你权限问题,但有些不会,比如下面这个。
~~~
java.lang.RuntimeException: setAudioSource failed
~~~
这就是录制音频的权限没有。
下面列出几个必须的权限:
~~~
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
~~~
二、startPreview fails
~~~
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
~~~
一般都是设置上面的Type就好了,但是我的4.0.3的酷派的手机就仍然报错,而4.0.4和4.4的手机都没有问题,我也是找了N多资料,但是最后还是给跪了,应该是硬件问题。
也试了Camera.open()之前将camera置为null,都不行。
三、MediaRecorder﹕ start failed: -19
这个错误出现在我的4.4的5太子上。
任我怎么修改也不行,最后用了其他人的代码才终于跑起来。
> 参考:[http://blog.csdn.net/shen332401890/article/details/8819564](http://blog.csdn.net/shen332401890/article/details/8819564)
总结:
众多的API版本使得向下兼容变得很难,在漫长的API1到API21的过程中,不一定哪一个API会跟你惊喜,让你原本预计一个小时的工作变成一天甚至更多。
Android问题集锦之三十八
最后更新于:2022-04-01 06:39:24
## not allowed to send broadcast android.intent.action.MEDIA_MOUNTED
当我们保存图片后就会发个通知告诉系统让sdcard重新挂载,这样其他程序就会立即找到这张图片。
~~~
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment
.getExternalStorageDirectory()));
sendBroadcast(intent);
~~~
但是到了Android4.4就不灵了,Google将MEDIA_MOUNTED的权限提高了,于是就报了一个下面的错误。
~~~
W/System.err﹕java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=18338, uid=10087
~~~
在stackoverfollow中找到了一个办法,在高版本中使用ACTION_MEDIA_SCANNER_SCAN_FILE去通知系统重新扫描文件。代码如下:
~~~
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(mPhotoFile); //out is your output file
mediaScanIntent.setData(contentUri);
CameraActivity.this.sendBroadcast(mediaScanIntent);
} else {
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
}
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
~~~
Android问题集锦之三十七
最后更新于:2022-04-01 06:39:21
## No resource found 'Theme.AppCompat.Light.DarkActionBar
AS导入他人的工程会遇到这样那样的问题。
如果他们用的AS版本比较老,那么需要AS会自动下载相对应版本的gradle。这个我在前几篇文中有提过。不过最简单的版本就是直接将gradle的版本改成最新。
gradle-wrapper.properties文件中将distributionUrl的gradle版本改成最新。
~~~
distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip
~~~
如果使用了兼容包,比如
~~~
dependencies {
// compile 'com.android.support:appcompat-v7:+'
}
~~~
我们要将其改成自己开发环境中较新的:
~~~
compile 'com.android.support:appcompat-v7:21.0.3'
~~~
然而此时再编译会遇到style AppTheme报错:
~~~
error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.
~~~
我这的解决办法是将编译工具的版本和target api都提高,并且它们是相对应的,如下:
~~~
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
~~~
这样做错误就没了。
Android问题集锦之三十六
最后更新于:2022-04-01 06:39:19
## com.android.dex.DexException: Multiple dex files define
完整的log如下:
~~~
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/opt/sdk/build-tools/21.1.2/dx --dex --no-optimize --output /home/linc/workspace/xxx/app/build/intermediates/dex/debug --input-list=/home/linc/workspace/xxx/app/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lorg/kobjects/base64/Base64;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
~~~
原来还是因ksoap2-android而起。我在上一文中修改了这个jar包并重命名,并将原jar包从目录中删除,编译通过。问题出现在今天的更新代码后,原来我没有将自己的更改提交,update后又把原来的jar包down下来了。所以两个jar包内容就出现了冲突造成了此编译错误。
将更新下来的jar删掉就可以了。
Android问题集锦之三十五
最后更新于:2022-04-01 06:39:17
## ksoap2-android混淆报错
混淆时报错,是org.xmlpull.v1与android.jar中重复了。大家的做法是将ksoap2-android-assembly-3.4.0.jar中的xmlpull.v1删掉,这样做虽然狠了点,但不会影响程序的功能。
做法是:
1.将ksoap2-android-assembly-3.4.0.jar解压,进入ksoap2-android-assembly-3.4.0中看到如下两个目录:
~~~
$ ls
META-INF org
~~~
2.将org/xmlpull/ 删掉
~~~
$ rm -rf org/xmlpull/
~~~
3.将刚刚的两个目录还原成jar,只要将这两个目录压缩就可以。我这边是Ubuntu自带的图形工具压缩,有jar的选项。如果你那边没有,只要压缩成zip然后改名成jar就可以。
尝试过在progard-rules.pro中添加以下代码:
~~~
-keep class org.kobjects.** { *; }
-keep class org.ksoap2.** { *; }
-keep class org.kxml2.** { *; }
-keep class org.xmlpull.** { *; }
~~~
其实这不是必须的。
Android问题集锦之三十四
最后更新于:2022-04-01 06:39:15
## android studio导入项目下载gradle-x.x.x-all.zip
每每打开github上的项目,都会先下载gradle。每个项目都有自己的gradle构建程序,但是打开一个新项目就重新下载gradle对于网络较差的情况真是苦不堪言。所以我们可以用已经下载好的放到对应的路径下并解压好就可以了。
gradle的配置目录在~/.gradle。
看看我的目录下内容:
~~~
~/.gradle$ du -sh *
46M caches
1.4M daemon
369M wrapper
~/.gradle/wrapper/dists$ ls
gradle-1.12-all gradle-2.2.1-all
~~~
每个项目在此有对应目录:
~~~
~/.gradle/wrapper/dists/gradle-2.2.1-all$ ls
c64ydeuardnfqctvr1gm30w53
~/.gradle/wrapper/dists/gradle-2.2.1-all$ ls c64ydeuardnfqctvr1gm30w53/
gradle-2.2.1 gradle-2.2.1-all.zip gradle-2.2.1-all.zip.lck gradle-2.2.1-all.zip.ok
~~~
只要在AS打开项目时下载gradle时,停止它。将已经下载的gradle解压到其对应目录下,重启AS就好了。
Android问题集锦之三十三
最后更新于:2022-04-01 06:39:12
## 避免每次启动AS都要fetching Android sdk compoment information
Android Studio每次启动都要去fetching sdk,由于Android sdk 官网我们还是连不上所以每次都要界面停在那里很久。
解决办法就是设置取消每次fetching sdk的功能。
只要在Android Studio的idea.properties文件最后加入下面内容:
~~~
#disable first run
disable.android.first.run=true
~~~
重启AS,搞定!
Android问题集锦之三十二
最后更新于:2022-04-01 06:39:10
## Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
这个问题出现在模拟器上的概率更大些,原因是某些应用使用了原生库(NDK,Native Lib),这些库的编译目标通常是arm架构的cpu,在x86上运行就会报这样的错误。
比如我看了一下报错的应用,果然有很多so在lib下。
~~~
$ ls lib/armeabi/
libapp_BaiduMapApplib_v2_1_1.so liblocSDK3.so libvi_voslib.so libyc.so
~~~
一个简单的解决办法就是换一个arm架构的模拟器。
Android问题集锦之三十一
最后更新于:2022-04-01 06:39:08
## Android Studio: Plugin with id 'android-library' not found
github上的很多项目都是用Android Studio开发的,昨天下载一个项目已经好久了,gradle的版本比较低,所以就遇到找不到‘android-library’的错误。从stackoverflow上找到类似的问题,解决方法是用较新的gradle版本。
~~~
Instruct Gradle to download Android plugin from Maven Central repository.
You do it by pasting the following code at the beginning of the Gradle build file:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.+'
}
}
Replace version string 1.0.+ with the latest version. Released versions of Gradle plugin can be found in official Maven Repository or on MVNRepository artifact search.
~~~
com.android.tools.build gradle 1.1.3 all (62) 07-Mar-2015 pom jar javadoc.jar sources.jar
> 参考:
> [http://stackoverflow.com/questions/18153739/android-studio-plugin-with-id-android-library-not-found](http://stackoverflow.com/questions/18153739/android-studio-plugin-with-id-android-library-not-found)
> [http://search.maven.org/#search|ga|1|g:%22com.android.tools.build%22%20AND%20a:%22gradle%22](http://search.maven.org/#search|ga|1|g:%22com.android.tools.build%22%20AND%20a:%22gradle%22)
Android问题集锦之三十
最后更新于:2022-04-01 06:39:05
## SDK离线文档打开慢
不知从什么时候起,打开离线文档成了一件不容易的事情,原因是虽然是离线的文档,但是有很多内容需要连接Android官网,等到超时后才能打开。这一点google做的不地道,你给大家的文档明明是离线的,为什么还要联网才行?
我们怎么办呢?改文件肯定是不行的,太多了。把网络断掉也不太可行。那么就从浏览器入手,将其调到offline状态。
比如Firefox的操作是:File—>Work Offline
如果你需要打开其他页面上网,那么记得还要将offline关掉。
Android问题集锦之二十九
最后更新于:2022-04-01 06:39:03
## Cannot run program "/xx/build-tools/xx/aapt": error=2, No such file or directory
全新的Ubuntu14.04.1(64位)搭建好Android开发环境,编译出错:
`Error:Execution failed for task ':facebookSDK:processReleaseResources'.> java.io.IOException: Cannot run program "/opt/sdk/build-tools/20.0.0/aapt": error=2, No such file or directory`
我的sdk被放在了/opt目录下,aapt文件静静的躺在那里,权限也够,怎么会找不到呢?
原来是64位系统搞的鬼。
解决的方案就是安装几个32位的兼容库,如下:
` $ sudo apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 `
重新clean编译,问题不见了!
Android问题集锦之二十八
最后更新于:2022-04-01 06:39:01
## You need to use a Theme.AppCompat theme (or descendant) with this activity.
**错误描述为:**
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
**起因:**
我想在Manifest中设置我的activity全屏,代码如下:
~~~
<activity
android:name=".MainActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:label="@string/app_name" >
~~~
**原因:**
从错误提示中提到Theme.AppCompat theme,这是因为我们的activity一定是继承了兼容包中的类,
比如我这里就无意中继承了ActionBarActivity,它来自android.support.v7.app.ActionBarActivity。
所以就要使用与其配合的AppCompat的theme才行。
**解决:**
1.根据提示来使用AppCompat的theme,如下:
~~~
<activity
android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:label="@string/app_name" >
~~~
不过我要设置全屏,但我并没有找到,所以虽然错误不见了,但并没有达到我的预期。
2.如果不是那么强烈需要继承自ActionBarActivity,就直接继承Activity吧。问题自然搞定!
Android问题集锦之二十七
最后更新于:2022-04-01 06:38:59
## Error parsing XML: unbound prefix
在编辑layout文件时遇到这个错误提示,有时我们找了好久都没有发现错误。其实这个错误跟我们的粗心拼写非常有关系。
unbound prefix往往意味着我们的前缀不对,而这个前缀又跟android分不开。
在我们将android拼写成Android、andorid等,错误还真不那么容易发现。技巧就是,看到这个错误,就沿着错误在附近寻找拼写错误。
细心才是解决这个错误的关键。