我买了书Bill Phillips和Brian Hardy"Android编程大书呆子牧场指南".在第一章中,我使用idea而不是eclipse创建了Gradle解决方案.这个由想法生成的项目不能编译.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new DummyFragment())
.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".QuizActivity$DummyFragment">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
错误:找不到符号变量容器
我没有改变任何东西,但项目没有编译
请帮我.
我写了一些库,它有一部分UI.此外,该库使用其他库.我想提供发布.aar以在任何应用程序中使用此部分UI.
我的图书馆有下一个家属:
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile ('com.android.support:recyclerview-v7:22.2.1'){
exclude group: 'com.android.support', module: 'support-v4'
}
compile 'com.inthecheesefactory.thecheeselibrary:stated-fragment-support-v4:0.10.0'
//Http communication, websockets, etc.
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
//Fonts
compile 'uk.co.chrisjenx:calligraphy:2.1.0'
//Unit tests
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
//Other
compile ('org.apache.commons:commons-lang3:3.4'){
exclude group: 'org.apache.httpcomponents'
}
//Reactive programmnig
compile 'io.reactivex:rxjava:1.0.13'
compile 'io.reactivex:rxandroid:0.25.0'
compile 'com.github.bumptech.glide:glide:3.6.1'
Run Code Online (Sandbox Code Playgroud)
当我构建.aar一切都很好,但当我将其包含.aar在另一个应用程序中时,我有下一个问题:
1). ./gradlew clean build
/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.
/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.
/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.
/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.
/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.
/home/user/projects/MainApp/app/build/intermediates/exploded-aar/com.my.sdk/SDK/0.0.1/res/values/values.xml:78:21-29:找不到匹配的资源给定的名称:attr'fontPath'.
:app:processDebugResources FAILED
解决方案非常简单 - 添加到MainApp/app/build.gradle下一行: …
android android-library android-gradle-plugin aar maven-publish
今天发现了一些项目,演示了android ndk编程。这是这个项目
\n\n我正在尝试启动项目DroidBlaster。我已经编译了所有本机库,没有错误。这是结果:
\n\n
我只是做了一些小改变:
\n\n1)。添加到选项application中的标签AndroidManifest.xmlandroid:hasCode="true"
2)。我从本机活动扩展并加载static活动块中的所有库。
我这样做是因为,如果没有这个更改,android 无法找到在(这是作者的代码)libdroidblaster.so中声明的库:AndroidManifest.xml
<activity\n android:name="android.app.NativeActivity"\n android:label="@string/app_name" >\n <meta-data\n android:name="android.app.lib_name"\n android:value="droidblaster" />\n\n <intent-filter>\n <action android:name="android.intent.action.MAIN" />\n\n <category android:name="android.intent.category.LAUNCHER" />\n </intent-filter>\n </activity>\nRun Code Online (Sandbox Code Playgroud)\n\n现在我的AndroidManifest.xml样子:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n package="com.demo.droidblaster"\n android:versionCode="1"\n android:versionName="1.0" >\n\n <uses-sdk\n android:minSdkVersion="10"\n android:targetSdkVersion="22" />\n\n <application\n android:icon="@drawable/ic_launcher"\n android:label="@string/app_name"\n android:theme="@style/AppTheme"\n android:hasCode="true">\n\n <activity android:name=".MainActivity"\n android:label="@string/app_name"\n android:configChanges="orientation|keyboardHidden">\n <intent-filter>\n <action android:name="android.intent.action.MAIN" />\n\n <category android:name="android.intent.category.LAUNCHER" />\n </intent-filter>\n </activity>\n\n <activity\n android:name="android.app.NativeActivity"\n …Run Code Online (Sandbox Code Playgroud) 什么dogfood构建意味着什么?我的意思是,我知道alpha版本,beta版本,但我从未听说过dogfood.对于哪些狗人来说这个?
例如:https://github.com/JakeWharton/u2020/blob/master/build.gradle#L29
我有两个可观察量:
Observable<String[]>
Run Code Online (Sandbox Code Playgroud)
和
Observable<KalturaVideo>
Run Code Online (Sandbox Code Playgroud)
我想检查每个KalturaVideo.getId(),它是否包含在String []中,它返回第一个observable,如果它包含,则不要在sourceList中发出它.
所以,第一个可观察到的emmits String []只有一次,但是第二个可观察的emmits项目是17次.如何恰当地组合这两个可观测量?这是我的解决方案:
private Observable<KalturaVideo> getSourceListObservalbe(String kalturaPlaylistId){
Observable<String[]> targetIdList = Observable.just(targetList)
.map((List<KalturaVideo> kalturaVideos) -> {
if(kalturaVideos == null || kalturaVideos.isEmpty()){
return new String[]{""};
}
String[] result = new String[kalturaVideos.size()];
int index = 0;
for (KalturaVideo item : kalturaVideos) {
result[index] = item.getId();
}
return result;
});
return Observable.zip(
targetIdList,
KalturaVideoRetriver.getVideoList(BuildPlaylistStep2Activity.this, kalturaPlaylistId),
(String[] idListOfTarget, KalturaVideo kalturaVideo) -> {
for (String item :idListOfTarget){
if(item.equals(kalturaVideo.getId())){
return null;
}
}
return kalturaVideo;
})
.filter(kalturaVideo -> { …Run Code Online (Sandbox Code Playgroud) 我有一个关于RxJava Observable的问题.例如,我有一个Retrofit接口,它返回Observable.我需要对这个视频流做一些事情.以下是下载视频并将其保存到列表中的代码:
API.getVideoListObservable()
.doOnError(t -> t.printStackTrace())
.map(r -> r.getObjects())
.doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l)))
.doOnNext(l -> kalturaVideoList.addAll(l))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
Run Code Online (Sandbox Code Playgroud)
API - 改造休息适配器
如果想更新视频列表,我应该做同样的操作吗?或者我应该订阅,取消订阅并再次订阅如下:
Subscription s = API.getVideoListObservable()
.doOnError(t -> t.printStackTrace())
.map(r -> r.getObjects())
.doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l)))
.doOnNext(l -> kalturaVideoList.addAll(l))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
//some code
...
s.unsubscribe();
s = null;
s = API.getVideoListObservable()
.doOnError(t -> t.printStackTrace())
.map(r -> r.getObjects())
.doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l)))
.doOnNext(l -> kalturaVideoList.addAll(l))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
Run Code Online (Sandbox Code Playgroud)