Showing posts with label 移动开发. Show all posts
Showing posts with label 移动开发. Show all posts

Thursday, September 12, 2013

Android Studio 0.2.x 引入多模块 Eclipse 项目

!!!!太他妈的累人了!整整折腾了两天!!!!!!!


不知从那个版本开始 Import Module... Android StudioFile菜单中消失了,在0.2.0之前的版本作为library的模块可以像Eclipse里一样,绝对路径可以完全和主Applicaiton无关,比如如下的目录结构:

/AllProjects/androidProject/myApplication
/Libs/android/ActionbarSherlock

这里myApplication用到ActionbarSherlock这个库,但是到了0.2.x版本行不通了。首先你得把ActionbarSherlock 移成和myApplication 同级目录,但如果按照上面的目录结构,eclipse 引出Gradle后,用Android Studio 引入后,Project的名字叫andropidProject ,如果在androidProject 目录下还有其他项目,引出到Android Studio后显然会引起混乱,所以重新调整目录结构如下:

/AllProjects/androidProject/myAppProject/myApplication
/AllProjects/android/Project/myAppProject/ActionbarSherelock

然后从Eclipse Export Gradle...但是:别以为这样就OK了,后面的问题仍然是一连串的,下面我分步骤讲解下。

基本环境:
  • Ubuntu 13.04 64bit
  • Eclipse Standard 4.3 (KEPLER)
  • Android Studio 0.2.8 Build #AI-132.821530
  • JDK "1.7.0_25"
  • Android SDK Tools 22.0.5


项目:
myApplication

依赖库:
ActionbarSherlock
drag-sort-listview


第一步:
调整目录结构,并在Eclipse里正确编译。

/
├─ AllProjects
│  └─ androidProject
│  └─ myAppProject
│     ├─ myApplication
│     ├─ ActionbarSherlock
│     └─ drag-sort-listview
└─ android-sdk-linux


第二步:
导出gradle build 文件。

选择Eclipse->File->Export... ,在Export 对话框中选择Android->Generate Gradle build files .具体导出方法参看 Android 官方介绍Migrating from Eclipse 。选中所有要导出的项目,myApplication, actionbarsherlock, drag-sort-listview ,点下一步,确认Project root 是否是 /AllProjects/androidProject/myAppProject , (如果不是,说明你的项目目录结构不正确),最后向导会在Project root 目录中生成下列文件和目录:

gradle/
build.gradle
gradlew
gradlew.bat
settings.gradle

第三步:
运行Android Studio ,Welcome 窗口中选择 Import Project... File->Import Project... 选择导入 /AllProjects/androidProject/myAppProject/build.gradle .

接下来第一个问题来了,按照Android 官方站点的介绍,选择 use gradle wrapper , 出现如下错误:



这里有两个问题,第1个问题比较复杂,先解决第2个问题。
2个问题产生的原因可能是我在Android Studio 中将ADT目录 指向 /android-sdk-linux ,而不是Android Studio Bundle ADT (在Android Studio 目录下的SDK目录),我想通常同时用Eclipse Android Studio的都会这么配置吧,否则机器上保存两份ADT 不是有病嘛!

3.1 步:
Project root 目录中创建 local.properties 文件,文件中加上如下行:

sdk.dir=/home/royer/android-sdk-linux

(你也可用Android Studio new Project.. 生成一个Android Project ,让后从那里copy 一个 local.properties过来)。


现在回头看第一个问题,这个应该是Android Studio 或者 Intellij Bug... Anyway, 解决方法如下:

3.2步:
选择 Use local gradle distribution , Gradle home 里输入你本地的Gradle 路径,如下图:



Gradle 可以到 Gradle download 下载,我用了1.7 版,1.61.8应该也都可以。

到此时,导入是成功了,但编译通不过,碰到的第1个问题是:

Gradle: Execution failed for task ':myApplication:processDebugManifest'.
> Manifest merging failed. See console for more info.

按照提示,开console, 运行 ./gradlew build ,可以看到原因,是myApplication 指定的 android:targetSdkVersion 低于 actionbarsherlock 指定的版本。

第四步:
修改 AndroidManifest.xml确保 主项目和库项目的tagetSdkVersion 一致.

重新build,刚才错误消失了,但新出了19个错误,大致如下:

Gradle: Error while executing dx command
Gradle: UNEXPECTED TOP-LEVEL EXCEPTION:
Gradle: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/NotificationCompatIceCreamSandwich;

实际上是如何引用 supportv4 库的问题, Eclipse 里是copy 到个项目的libs 目录下,而Android Studio 是引用repositories 的方法。参考Android 官方文档 Support Library Setup,解决如下:

第五步:
修改每个项目的build.gradle 文件。
dependencies {
compile "com.android.support:support-v4:18.0.+"
compile fileTree(dir: 'libs', include: '*.jar', exclude: 'android-support-v4.jar')
.....
}
注:如果你的libs 目录里只有android-support-v4.jar ,则可以把 comile fileTree 整行删除。



OK, 到此为止,至少我成功的import了。

Friday, February 23, 2007

轮盘赌分析器1.0版算是差不多了


1.0 版有这些功能基本够用了,2.0 版打算把换人的情况也记录下来,然后显示每个落点在轮盘上的分布,可以按人来显示,这样就可以观察这个人扔的是不是会集中这某个范围内,其实最好能记录每次打骰子时轮盘的位置,看看落点和这个起始点是不是有一定的关系,但是这个太难记录了.你坐的位置不一定能看到轮盘.

Tuesday, February 6, 2007

明天开始写轮盘赌了


明天开始写轮盘赌,看看目前的三天打鱼两天晒网的状态下,俺要多少天写完它?

日后再去 Las Vegas ,能用它赚个几万美元回来?哈哈哈。。

我看只要统计出 红、黑,奇、偶,6 个 12 的历史概率就可以了,至于 1-18,19-36 俺反正不常压,就拉倒了。

Monday, February 5, 2007

CeSetUserNotificationEx 工作不正常

真郁闷啊!N天过去了,这个问题居然还是没有解决。看来只能先放一放了。我的要求很简单啊,只是在指定的时间发出声音或振动来提醒。

 

总结一下,这个小程序,其实有两几个问题都悬而未决。

1.       CeGetUserNotificationPreferences 不显示对话框不能实现
下面是MSDN CE_USER_NOTIFICATION 中的 pwszDialogTitle 的说明:
pwszDialogTitle
Pointer to the string that contains the title of the user notification dialog box. If this member is NULL, no dialog is displayed. The CeGetUserNotificationPreferences function ignores this member.
可事与愿违,Dialog 总是显示。仔细看了整个 CE_USER_NOTIFICATION 的说明,在 Windows Mobile Remarks 一节中有如下这段:
Setting the ActionFlags value PUN_DIALOG on a Windows Mobile-based Pocket PC will cause sounds to be played based on the user settings in the Sounds and Notifications Control Panel Application (CPL). In addition, sounds that result from other ActionFlags flags being set are also played. This will result in multiple sounds on the Windows Mobile-based Pocket PC. To avoid multiple sounds, you should not set any other ActionFlags flags on a Windows Mobile-based Pocket PC except PUN_DIALOG.
唉!辜妄听之吧。

2.       CeSetNotificationEx 不能在指定的时间产生通知。
这是最让人抓狂的事了,当然实现这个功能还有很多方法,比如 SHNotficationAdd 应该也能实现(说"应该"是我还没试过). 曾经一度堕落到调 CeRunAppAtTime 来试验,结过还是不能在指定的时间run app.网上查了一些东西,帮助不大,不过记下来,日后看看,今天的我还是流了很多血汗的。


Windows Mobile Pocket PC Smartphone Programming: Pocket PC Power Management Series 6: Request the Device to Run: a Gentle Way

http://www.tech-archive.net/Archive/PocketPC/microsoft.public.pocketpc.developer/2004-04/0621.html

CeRunAppAtTime does not work   CeRunAppAtTime 在很多机型上就是不能正常工作?小比同志工作没做好?

Friday, February 2, 2007

CeSetUserNotifcationEx 的使用

Windows Mobile Pocket PC Smartphone Programming: Pocket PC Power Management Series 6: Request the Device to Run: a Gentle Way

我不想RunApp ,我只是需要能够发声提醒或振动

文章中还是有错误的:
hNotify = CeSetUserNotificationEx(0, ¬ifTrigger, NULL);
这个Handle 文中在该函数调用成功后,就直接调用 CloseHandle 来关闭,至少 Mobile 5.0 中是直接导致程序崩溃的。这点在该文的评论中也有人提及了

Search This Blog